我個(gè)人的理解:typescript
就是在javascript
的基礎(chǔ)上添加了 類型聲明機(jī)制铭若、添加了接口和枚舉類型
作用:減少類型錯(cuò)誤辆琅、增加代碼提示笙什、語(yǔ)義化代碼
聲明文件
聲明文件是以.d.ts
為后綴的文件即供,開(kāi)發(fā)者在聲明文件中編寫(xiě)類型聲明,TypeScript
根據(jù)聲明文件的內(nèi)容進(jìn)行類型檢查扫茅。(注意同目錄下最好不要有同名的.ts
文件和.d.ts
蹋嵌,例如lib.ts
和lib.d.ts
,否則模塊系統(tǒng)無(wú)法只根據(jù)文件名加載模塊)
為什么需要聲明文件呢葫隙?我們知道TypeScript根據(jù)類型聲明進(jìn)行類型檢查栽烂,但有些情況可能沒(méi)有類型聲明:
- 第三方包,因?yàn)榈谌桨虬蠖际?code>JavaScript語(yǔ)法恋脚,而非
TypeScript
腺办,沒(méi)有類型。 - 宿主環(huán)境擴(kuò)展糟描,如一些
hybrid
環(huán)境怀喉,在window
變量下有一些bridge
接口,這些接口沒(méi)有類型聲明蚓挤。
項(xiàng)目集成typescript
后磺送,整個(gè)項(xiàng)目只會(huì)編譯校驗(yàn)typescript
文件,所以項(xiàng)目中要書(shū)寫(xiě)typescript
- 第三方
javascript
庫(kù)文件灿意,如果本身有聲明文件,則可以直接使用 - 第三方
javascript
庫(kù)文件崇呵,如果沒(méi)有聲明文件缤剧,則要在項(xiàng)目?jī)?nèi)書(shū)寫(xiě)響應(yīng)的聲明文件
總結(jié)一下,TypeScript會(huì)在特定的目錄讀取指定的聲明文件
- 在內(nèi)部項(xiàng)目中域慷,
TypeScript
會(huì)讀取tsconfig.json
中的文件集合荒辕,在其中的聲明文件才會(huì)被處理。 - 讀取
node_modules中
各第三方包的package.json
的types
或者typing
指定的文件犹褒。 - 讀取
@types
目錄下同名包的聲明文件抵窒。
變量聲明
let isDone: boolean = false
let list: Array<number> = [1, 2, 3]
function add(x: number, y: number): number {
return x + y;
}
interface Params {
a: string
}
function sub(params: Params):void{
}
枚舉
enum Direction {
Up, // 默認(rèn) 0
Down, //默認(rèn) 1
Left = 4, // 默認(rèn) 2,修改成4
Right, //默認(rèn)3
}
接口
interface SquareConfig {
Color: string;
Width?: number; // 可選
readonly Age: number; // 只能在對(duì)象剛剛創(chuàng)建的時(shí)候修改其值
}
類
class Animals {
public name:string;
private age: number; // private變量只能在本類內(nèi)訪問(wèn)
protected sex: string; // protected 可以在子類中訪問(wèn)
constructor(theName: string){
this.name = theName
}
class Dog extends Animals {
constructor(){
super('dog')
}
}
}
模塊
模式參考esModule
// demo.ts
export class Dog { ... }
export class Cat { ... }
export class Tree { ... }
export class Flower { ... }
export default const One = 1
import { Dog } from './demo.ts'
import * as Animals from './demo.ts'
import One from './demo.ts'
命名空間
namespace Animals {
class Dog {}
}
const dog = new Animals.Dog()
declear
聲明文件
在 TS 中使用非 TS 編寫(xiě)的第三方庫(kù),需要有個(gè) xx.d.ts 聲明文件
關(guān)鍵字 declare
表示聲明的意思叠骑,我們可以用它來(lái)做出各種聲明
declare var // 聲明全局變量
declare function // 聲明全局方法
declare class // 聲明全局類
declare enum // 聲明全局枚舉類型
declare namespace // 聲明(含有子屬性的)全局對(duì)象
interface 和 type // 聲明全局類型