一 我要漲知識 —— TypeScript 常見面試題

1、ts 中的 any 和 unknown 有什么區別?unknown 和 any 的主要區別是 unknown 類型會更加嚴格:在對 unknown 類型的值執行大多數操作之前,我們必須進行某種形式的檢查 。而在對 any 類型的值執行操作之前,我們不必進行任何檢查 。
舉例說明:
let foo: any = 123;console.log(foo.msg); // 符合TS的語法let a_value1: unknown = foo; // OKlet a_value2: any = foo; // OKlet a_value3: string = foo; // OKlet bar: unknown = 222; // OKconsole.log(bar.msg); // Errorlet k_value1: unknown = bar; // OKlet K_value2: any = bar; // OKlet K_value3: string = bar; // Error
因為bar是一個未知類型(任何類型的數據都可以賦給 unknown 類型),所以不能確定是否有msg屬性 。不能通過TS語法檢測;而 unknown 類型的值也不能將值賦給 any 和 unknown 之外的類型變量
總結:
any 和 unknown 都是頂級類型 , 但是 unknown 更加嚴格 , 不像 any 那樣不做類型檢查,反而 unknown 因為未知性質,不允許訪問屬性,不允許賦值給其他有明確類型的變量 。
2、說說你對 typescript 的理解?與 javascript 的區別?2.1、TS是什么?TypeScript 是 JavaScript 的類型的超集,支持ES6語法,支持面向對象編程的概念,如類、接口、繼承、泛型等

超集,不得不說另外一個概念,子集,怎么理解這兩個呢,舉個例子,如果一個集合A里面的的所有元素集合B里面都存在,那么我們可以理解集合B是集合A的超集 , 集合A為集合B的子集

一 我要漲知識 —— TypeScript 常見面試題

文章插圖
其是一種靜態類型檢查的語言 , 提供了類型注解 , 在代碼編譯階段就可以檢查出數據類型的錯誤
同時擴展了JavaScript 的語法,所以任何現有的JavaScript 程序可以不加改變的在 TypeScript 下工作
為了保證兼容性,typescript在編譯階段需要編譯器編譯成純Javascript來運行,是為大型應用之開發而設計的語言,如下:
tsx文件如下:
const hello : string = "Hello World!"console.log(hello)復制代碼編譯文件后:
const hello = "Hello World!"console.log(hello)復制代碼2.2、特性typescript的特性主要有如下:
  • 類型批注和編譯時類型檢查 :在編譯時批注變量類型
  • 類型推斷:ts中沒有批注變量類型會自動推斷變量的類型
  • 類型擦除:在編譯過程中批注的內容和接口會在運行時利用工具擦除
  • 接口:ts中用接口來定義對象類型
  • 枚舉:用于取值被限定在一定范圍內的場景
  • Mixin:可以接受任意類型的值
  • 泛型編程:寫代碼時使用一些以后才指定的類型
  • 名字空間:名字只在該區域內有效,其他區域可重復使用該名字而不沖突
  • 元組:元組合并了不同類型的對象,相當于一個可以裝不同類型數據的數組
2.3、類型批注通過類型批注提供在編譯時啟動類型檢查的靜態類型,這是可選的,而且可以忽略而使用JavaScript常規的動態類型
function Add(left: number, right: number): number { return left + right;}對于基本類型的批注是number、bool和string,而弱或動態類型的結構則是any類型2.4、類型推斷當類型沒有給出時 , TypeScript編譯器利用類型推斷來推斷類型,如下:
let str = 'string'變量str被推斷為字符串類型,這種推斷發生在初始化變量和成員,設置默認參數值和決定函數返回值時
如果由于缺乏聲明而不能推斷出類型,那么它的類型被視作默認的動態any類型
2.5、接口接口簡單來說就是用來描述對象的類型 數據的類型有number、null、string等數據格式,對象的類型就是用接口來描述的
interface Person {name: string;age: number;}let tom: Person = {name: 'Tom',age: 25};2.6、TS 與 JS 的區別
  • TypeScript 是 JavaScript 的超集,擴展了 JavaScript 的語法
  • TypeScript 可處理已有的 JavaScript 代碼 , 并只對其中的 TypeScript 代碼進行編譯
  • TypeScript 文件的后綴名 .ts (.ts,.tsx,.dts),JavaScript 文件是 .js
  • 在編寫 TypeScript 的文件的時候就會自動編譯成 js 文件
更多的區別如下圖所示:
一 我要漲知識 —— TypeScript 常見面試題

文章插圖
3、為什么推薦使用 TypeScript ?TypeScript是微軟公司開發和維護的一種面向對象的編程語言 。它是JavaScript的超集,包含其所有元素 。
強類型和弱類型、靜態類型和動態類型是兩組不同的概念 。
類型強弱是針對類型轉換是否顯示來區分,靜態和動態類型是針對類型檢查的時機來區分 。

推薦閱讀