一、缺點(diǎn):
- 需要長時間來編譯代碼。
- 在使用第三方庫時,需要有第三方庫的定義文件,并不是所有第三方庫都提供了定義文件,提供的定義文件是否準(zhǔn)確也值得商榷。
二、新增基礎(chǔ)類型
- Tuple(元組)
- enum(枚舉)
- never(表示那些永遠(yuǎn)不存在的值類型。如總是拋出異?;蛘吒静粫址祷刂档暮瘮?shù)的返回值類型。)
- void(與any相反表示沒有任何類型。函數(shù)沒有返回值時用void。)
- any (表示任意類型)
三、如何編譯Typescript
tsc xxx.ts
四、如何將多個ts合并成一個js文件
tsc --outfile compact.js file1.ts file2.ts file3.js
五、如何自動編譯ts文件并實(shí)時修改?
tsc --watch file.ts
六、什么是TS接口?說說它有哪些特性?
TS的核心原則之一就是對值所具有的結(jié)構(gòu)進(jìn)行類型檢查。
它有時被稱為“鴨式辯型法”或“結(jié)構(gòu)性子類型化”。
其作用就是為這些類型進(jìn)行命名,或?yàn)槟愕拇a或者三方代碼定義契約。
特點(diǎn):
1:定義對象、數(shù)組、函數(shù)、類等。
2:接口可以相互繼承
3:接口可以繼承類
4:可選屬性與額外檢查

七、如何調(diào)用基類中的構(gòu)造函數(shù)
super()
八、如何實(shí)現(xiàn)類的繼承
extends
九、Typescript中的模塊是什么?
Typescript1.5后為了與ES6術(shù)語保持一致,內(nèi)部模塊都稱為命名空間,外部模塊簡稱模塊。
模塊在自身的作用域里執(zhí)行,并不是全局作用域。這就意味著模塊類的類、函數(shù)、對象等對外都是不可見的。除非你通過export導(dǎo)出,import導(dǎo)入。
模塊通過使用模塊加載器導(dǎo)入另一個模塊。在運(yùn)行時,模塊加載器負(fù)責(zé)在執(zhí)行模塊之前定位和執(zhí)行模塊的所有依賴項(xiàng)。JavaScript中最常用的模塊加載器是用于Node.js的CommonJS模塊加載器和用于Web應(yīng)用程序的require.js模塊加載器。
特別說明:
為了支持CommonJS和AMD語法中的exports,TS提供了export = 語法,引入方式為import xxx = require("xxx");
十、解釋下Typescript的裝飾器是什么?
裝飾器是一種特殊類型的聲明,它能被附加在類、方法、屬性、訪問符、參數(shù)上。
裝飾器使用@expression這種方式,expression求值后必須為一個函數(shù),它在運(yùn)行時調(diào)用,被裝飾器聲明的信息作為參數(shù)傳入。
十一、什么是Mixins?
一種通過重用組件構(gòu)建類的方法。
不通過類的直接繼承來實(shí)現(xiàn),而是將基類作為接口來實(shí)現(xiàn)。對于基類實(shí)例化部分在子類中實(shí)現(xiàn),基類中原型的部分在子類中進(jìn)行聲明占位,然后通過一個Minxin函數(shù)將基類上的原型屬性拷貝到子類上。
十二、TSD是什么?
TSD是Typescript的包管理工具,我們都知道在.ts文件中引入第三方庫時,第三方庫需要.d.ts聲明文件的,負(fù)責(zé)第三方庫在.ts中是無法識別,會報錯的。
TSD就是幫我查找對應(yīng)的三方庫TS聲明文件并下載安裝。
使用過程如下:
1:npm install tsd -g
2: tsd init
3: tsd query xxx三方庫 --action install
4:在使用的.ts文件中通過reference指向該聲明文件
/// <reference path="typings/jquery/jquery.d.ts" />
十三、Declare關(guān)鍵字是干嘛用的?
我們在.ts中使用的第三方庫時沒有.d.ts聲明文件的時候,我們可以通過declare來寫申明文件。
可以聲明該模塊,甚至可以直接聲明一個值為any的同名的變量,然后我們就可以在代碼中直接使用該三方庫了。
十四、如何讓.ts文件自動生成對應(yīng)的.d.ts聲明文件?
tsc --declaration test.ts
十五、tsconfig.json文件有什么作用?
該文件存在于Typescript項(xiàng)目的根目錄里,其作用是指定相關(guān)選項(xiàng)告訴ts編譯器如何編譯ts文件。
十六、Typescript中的泛型?作用是什么?
泛型代表的是泛指某一類型,更像是一個類型變量。由尖括號包裹<T>。
主要作用是創(chuàng)建邏輯可復(fù)用的組件。
泛型可以作用在函數(shù)、類、接口上。
函數(shù):
function greet<T>(name: T) {}
類:
class createObj<T> {
name: T
}
接口:
interface IF<T> {
name: T
}
泛型還可以被約束,這樣就是任意類型了。
interface TIF {
length: number
}
function test<T extends TIF>(params: T) {
console.log("=========>>>", params.length);
}
泛型約束之類型參數(shù)
function getPropoty<T, K extends keyof T>(obj: T, key: K) {
return obj[key];
}
十七、說說接口和類型別名type的區(qū)別?
.他們很相似,type可以作用于原始值,聯(lián)合類型,元組以及其它任何你需要手寫的類型。
區(qū)別一:它并不會真的創(chuàng)建一個新的名字,當(dāng)你在編譯器上將鼠標(biāo)懸停在定義為該類型別名定義的變量上時返回的是該類型別名引用的對象。相反,接口會創(chuàng)建一個新名字 ,當(dāng)你把鼠標(biāo)懸停在該接口定義的變量上時返回的是該接口名。
區(qū)別二:類型別名不能extends和implements
區(qū)別三:對于元組,聯(lián)合類型我們一般使用類型別名type。
十八、什么是Typescript映射文件?
.map源映射文件
它是編譯后的.js與源文件之間的映射文件。調(diào)試器使用該文件,使我們可以直接調(diào)試Typescript文件而不是編譯后的JS文件。
十九、類型斷言
類型斷言對運(yùn)行沒有什么影響,僅供編譯器使用。
向編譯器提供我們所希望的分析代碼的提示。
表示斷言的兩種方式:
1:<類型>變量
2:變量 as 類型 (在tsx中只能使用這種方式)
二十、什么是Rest參數(shù)?
在不使用arguments對象的情況允許我們的函數(shù)傳遞可變數(shù)量的參數(shù)的另一種實(shí)現(xiàn)方式。
表示方式是...params。
rest參數(shù)的規(guī)則是:
1:一個函數(shù)只能有一個rest參數(shù)。
2:它只能出現(xiàn)在參數(shù)列表的最后一個。
3:該參數(shù)必須是數(shù)組類型。
二十一、什么是枚舉?
枚舉可以使我們定義一些帶名字的常量,用于清晰的表達(dá)意圖和創(chuàng)建一組有區(qū)別的用例。
枚舉主要分為兩類。一類是基于數(shù)字的,有自增長和反向映射的特性。一類是基于字符串的。
當(dāng)然還有混合了這兩種基礎(chǔ)類型的枚舉,我們叫做異構(gòu)枚舉。