1:什么是Typescript?
Typescript是強(qiáng)類型的Javascript超集,支持ES6語法,支持面向?qū)ο缶幊痰母拍?,如類、接口、繼承、泛型等。Typescript并不直接在瀏覽器上運(yùn)行,需要編譯器編譯成純Javascript來運(yùn)行。
2:說說Typescripy和Javascript的區(qū)別?

3:說說Typescript的優(yōu)缺點(diǎn)?
優(yōu)點(diǎn):
1:快速簡(jiǎn)單,易于學(xué)習(xí)。
2:編譯時(shí)提供錯(cuò)誤檢查, 在代碼運(yùn)行前就會(huì)進(jìn)行錯(cuò)誤提示。
3:支持所有的JS庫。
4:支持ES6,提供了ES6所有優(yōu)點(diǎn)和更高的生產(chǎn)力。
5:使用繼承提供可重用性。
6:有助于代碼結(jié)構(gòu)。
7:通過定義模塊來定義命名空間。
缺點(diǎn):
1:需要長(zhǎng)時(shí)間的來編譯代碼。
2:在使用第三方庫時(shí),需要有三方庫的定義文件,并不是所有三方庫都提供了定義文件,提供的定義文件是否準(zhǔn)確也值得商榷。
4:Typescript有哪些基礎(chǔ)類型?
1:number
2:string
3:boolean
4:Symbol
5:Array
6:Tuple(元組)
7:enum(枚舉)
8:object
9:never
表示那些永不存在的值類型。如總是拋出異?;蛘吒静粫?huì)有返回值的函數(shù)的返回值類型。
10:void
與any相反表示沒有任何類型。函數(shù)沒有返回值時(shí)用void。
11:null和undefined
它們是所有類型的子類型。當(dāng)你指定structNullChecks時(shí),它們只能賦值給void或者它們自己本身。
12:any
5:如何編譯Typescript?
tsc xxx.ts
6:如何將多個(gè)ts文件合并成一個(gè)js文件?
tsc --outfile compact.js file1.ts file2.ts file3.js
7:如何自動(dòng)編譯ts文件并實(shí)時(shí)修改?
tsc --watch file.ts
8:什么是TS接口?說說它有哪些特性?
TS的核心原則之一就是對(duì)值所具有的結(jié)構(gòu)進(jìn)行類型檢查。
它有時(shí)被稱為“鴨式辯型法”或“結(jié)構(gòu)性子類型化”。
其作用就是為這些類型進(jìn)行命名,或?yàn)槟愕拇a或者三方代碼定義契約。
特點(diǎn):
1:定義對(duì)象、數(shù)組、函數(shù)、類等。
2:接口可以相互繼承
3:接口可以繼承類
4:可選屬性與額外檢查

9:如何理解Typescript中的類?并說說它有什么特性?
Typescript是一種面向?qū)ο蟮腏avascript語言,和其他任何面向?qū)ο缶幊痰膹?qiáng)語言一樣,類是描述某一組對(duì)象共有屬性狀態(tài)或行為的實(shí)體。它就是構(gòu)建具體對(duì)象實(shí)例的模板和藍(lán)圖。
特性:
1:繼承
2:多態(tài)
3:抽象
4:封裝
5:實(shí)例
10:Typescript支持哪些面向?qū)ο笮g(shù)語?
1:類
2:繼承
3:多態(tài)
4:抽象
5:泛化
6:接口封裝
7:實(shí)例化
等等...
11:如何調(diào)用基類中的構(gòu)造函數(shù)?
super()
12:如何實(shí)現(xiàn)類的繼承?
extends
13:Typescript中的模塊是什么?
Typescript1.5后為了與ES6術(shù)語保持一致,內(nèi)部模塊都稱為命名空間,外部模塊簡(jiǎn)稱模塊。
模塊在自身的作用域里執(zhí)行,并不是全局作用域。這就意味著模塊類的類、函數(shù)、對(duì)象等對(duì)外都是不可見的。除非你通過export導(dǎo)出,import導(dǎo)入。
模塊通過使用模塊加載器導(dǎo)入另一個(gè)模塊。在運(yùn)行時(shí),模塊加載器負(fù)責(zé)在執(zhí)行模塊之前定位和執(zhí)行模塊的所有依賴項(xiàng)。JavaScript中最常用的模塊加載器是用于Node.js的CommonJS模塊加載器和用于Web應(yīng)用程序的require.js模塊加載器。
特別說明:
為了支持CommonJS和AMD語法中的exports,TS提供了export = 語法,引入方式為import xxx = require("xxx");
14:解釋下Typescript的裝飾器是什么?
裝飾器是一種特殊類型的聲明,它能被附加在類、方法、屬性、訪問符、參數(shù)上。
裝飾器使用@expression這種方式,expression求值后必須為一個(gè)函數(shù),它在運(yùn)行時(shí)調(diào)用,被裝飾器聲明的信息作為參數(shù)傳入。
15:什么是Mixins?
一種通過重用組件構(gòu)建類的方法。
不通過類的直接繼承來實(shí)現(xiàn),而是將基類作為接口來實(shí)現(xiàn)。對(duì)于基類實(shí)例化部分在子類中實(shí)現(xiàn),基類中原型的部分在子類中進(jìn)行聲明占位,然后通過一個(gè)Minxin函數(shù)將基類上的原型屬性拷貝到子類上。
16:TSD是什么?
TSD是Typescript的包管理工具,我們都知道在.ts文件中引入第三方庫時(shí),第三庫是需要.d.ts聲明文件的,否則三方庫在.ts中是無法識(shí)別報(bào)錯(cuò)的。
TSD就是幫我查找對(duì)應(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" />
17:Declare關(guān)鍵字是干嘛用的?
我們?cè)?ts中使用的第三方庫時(shí)沒有.d.ts聲明文件的時(shí)候,我們可以通過declare來寫申明文件。
可以聲明該模塊,甚至可以直接聲明一個(gè)值為any的同名的變量,然后我們就可以在代碼中直接使用該三方庫了。
18:如何讓.ts文件自動(dòng)生成對(duì)應(yīng)的.d.ts聲明文件?
tsc --declaration test.ts
19:tsconfig.json文件有什么作用?
該文件存在于Typescript項(xiàng)目的根目錄里,其作用是指定相關(guān)選項(xiàng)告訴ts編譯器如何編譯ts文件。
20:說說什么Typescript中的泛型?作用是什么?
泛型代表的是泛指某一類型,更像是一個(gè)類型變量。由尖括號(hào)包裹<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];
}
21:說說接口和類型別名type的區(qū)別?
他們很相似,type可以作用于原始值,聯(lián)合類型,元組以及其它任何你需要手寫的類型。
區(qū)別一:它并不會(huì)真的創(chuàng)建一個(gè)新的名字,當(dāng)你在編譯器上將鼠標(biāo)懸停在定義為該類型別名定義的變量上時(shí)返回的是該類型別名引用的對(duì)象。相反,接口會(huì)創(chuàng)建一個(gè)新名字 ,當(dāng)你把鼠標(biāo)懸停在該接口定義的變量上時(shí)返回的是該接口名。
區(qū)別二:類型別名不能extends和implements
區(qū)別三:對(duì)于元組,聯(lián)合類型我們一般使用類型別名type。
22:什么是Typescript映射文件?
.map源映射文件
它是編譯后的.js與源文件之間的映射文件。調(diào)試器使用該文件,使我們可以直接調(diào)試Typescript文件而不是編譯后的JS文件。
23:什么是類型斷言?
類型斷言對(duì)運(yùn)行沒有什么影響,僅供編譯器使用。
向編譯器提供我們所希望的分析代碼的提示。
表示斷言的兩種方式:
1:<類型>變量
2:變量 as 類型 (在tsx中只能使用這種方式)
24:什么是Rest參數(shù)?
在不使用arguments對(duì)象的情況允許我們的函數(shù)傳遞可變數(shù)量的參數(shù)的另一種實(shí)現(xiàn)方式。
表示方式是...params。
rest參數(shù)的規(guī)則是:
1:一個(gè)函數(shù)只能有一個(gè)rest參數(shù)。
2:它只能出現(xiàn)在參數(shù)列表的最后一個(gè)。
3:該參數(shù)必須是數(shù)組類型。
25:什么是枚舉?
枚舉可以使我們定義一些帶名字的常量,用于清晰的表達(dá)意圖和創(chuàng)建一組有區(qū)別的用例。
枚舉主要分為兩類。一類是基于數(shù)字的,有自增長(zhǎng)和反向映射的特性。一類是基于字符串的。
當(dāng)然還有混合了這兩種基礎(chǔ)類型的枚舉,我們叫做異構(gòu)枚舉。
26:說說TS的模塊解析策略,什么是相對(duì)導(dǎo)入?什么是非相對(duì)導(dǎo)入?


可以通過moduleResolution屬性來設(shè)置解析模式。
27:什么是聲明合并?
聲明合并是編譯器將2個(gè)或多個(gè)同名聲明合并為一個(gè),合并后的聲明擁有被合并聲明的所有特性。
目前除了類不能與其他類和變量合并外,其他聲明都是可以相互合并的。