Typescript面試題

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è),合并后的聲明擁有被合并聲明的所有特性。

目前除了類不能與其他類和變量合并外,其他聲明都是可以相互合并的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容