TypeScript 书写 .d.ts 文件的一些注意事项
Do’s and Don’ts
永遠不要使用類型 Number、String、Boolean、Symbol 或 Object. 這些類型是指幾乎從未在 JavaScript 代碼中正確使用的非原始裝箱對象。
下列用法不推薦:
function reverse(s: String): String;
應該使用下列用法:
function reverse(s: string): string;
any
除非您正在將 JavaScript 項目遷移到 TypeScript,否則不要使用 any 作為類型。 編譯器有效地將 any 視為“請關閉此內容的類型檢查”。 它類似于在變量的每個用法周圍放置@ts-ignore 注釋。 當您第一次將 JavaScript 項目遷移到 TypeScript 時,這會非常有用,因為您可以將尚未遷移的內容的類型設置為任何類型,但是在完整的 TypeScript 項目中,您將禁用對程序的任何部分進行類型檢查 用它。
如果您不知道要接受什么類型,或者當您想接受任何東西時,因為您會盲目地傳遞它而不與它交互,則可以使用 unknown.
Return Types of Callbacks
不要將返回類型 any 用于其值將被忽略的回調。下列用法不推薦:
function fn(x: () => any) {x(); }正確做法:使用類型 void 替代 any:
function fn(x: () => void) {x(); }原因:使用 void 更安全,因為它可以防止您以未經檢查的方式意外使用 x 的返回值。
function fn(x: () => void) {var k = x(); // oops! meant to do something elsek.doSomething(); // error, but would be OK if the return type had been 'any' }Return Types of Callbacks
盡量避免在回調函數(shù)里定義 optional 參數(shù),除非你覺得實在有必要。
interface Fetcher {getObject(done: (data: any, elapsedTime?: number) => void): void; }這有一個非常具體的含義:done 回調可能用 1 個參數(shù)調用,也可能用 2 個參數(shù)調用。 作者可能打算說回調可能不關心 elapsedTime 參數(shù),但是沒有必要使參數(shù)成為可選參數(shù)來實現(xiàn)這一點——提供接受更少參數(shù)的回調總是合法的。
重載和回調函數(shù)
不要編寫僅在回調數(shù)量上有所不同的單獨重載:
declare function beforeAll(action: () => void, timeout?: number): void; declare function beforeAll(action: (done: DoneFn) => void,timeout?: number ): void;請使用最大數(shù)量編寫單個重載:
declare function beforeAll(action: (done: DoneFn) => void,timeout?: number ): void;函數(shù)重載的定義順序
不要在更具體的重載之前放置更一般的重載:
declare function fn(x: any): any; declare function fn(x: HTMLElement): number; declare function fn(x: HTMLDivElement): string; var myElem: HTMLDivElement; var x = fn(myElem); // x: any, wat?正確做法:從具體到一般
declare function fn(x: HTMLDivElement): string; declare function fn(x: HTMLElement): number; declare function fn(x: any): any; var myElem: HTMLDivElement; var x = fn(myElem); // x: string, :)原因:
TypeScript 在解析函數(shù)調用時選擇第一個匹配的重載。 當較早的重載比較晚的重載“更通用”時,較晚的重載實際上是隱藏的并且無法調用。
使用可選參數(shù)
不要寫幾個只在尾隨參數(shù)上不同的重載:
/* WRONG */ interface Example {diff(one: string): number;diff(one: string, two: string): number;diff(one: string, two: string, three: boolean): number; }正確做法:盡量使用可選參數(shù):
interface Example {diff(one: string, two?: string, three?: boolean): number; }使用聯(lián)合類型
不要編寫僅在一個參數(shù)位置上因類型不同而不同的重載:
/* WRONG */ interface Moment {utcOffset(): number;utcOffset(b: number): Moment;utcOffset(b: string): Moment; }盡可能使用聯(lián)合類型:
/* OK */ interface Moment {utcOffset(): number;utcOffset(b: number | string): Moment; }總結
以上是生活随笔為你收集整理的TypeScript 书写 .d.ts 文件的一些注意事项的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JS生成简单随机答案选择器,小抽奖器
- 下一篇: 《魔兽世界》天定亡者套装怎么获得 天定亡