日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TypeScript 书写 .d.ts 文件的一些注意事项

發(fā)布時間:2023/12/19 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TypeScript 书写 .d.ts 文件的一些注意事项 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Do’s and Don’ts

永遠不要使用類型 Number、String、Boolean、Symbol 或 Object. 這些類型是指幾乎從未在 JavaScript 代碼中正確使用的非原始裝箱對象。

下列用法不推薦:

function reverse(s: String): String;

應(yīng)該使用下列用法:

function reverse(s: string): string;

any

除非您正在將 JavaScript 項目遷移到 TypeScript,否則不要使用 any 作為類型。 編譯器有效地將 any 視為“請關(guān)閉此內(nèi)容的類型檢查”。 它類似于在變量的每個用法周圍放置@ts-ignore 注釋。 當(dāng)您第一次將 JavaScript 項目遷移到 TypeScript 時,這會非常有用,因為您可以將尚未遷移的內(nèi)容的類型設(shè)置為任何類型,但是在完整的 TypeScript 項目中,您將禁用對程序的任何部分進行類型檢查 用它。

如果您不知道要接受什么類型,或者當(dāng)您想接受任何東西時,因為您會盲目地傳遞它而不與它交互,則可以使用 unknown.

Return Types of Callbacks

不要將返回類型 any 用于其值將被忽略的回調(diào)。下列用法不推薦:

function fn(x: () => any) {x(); }

正確做法:使用類型 void 替代 any:

function fn(x: () => void) {x(); }

原因:使用 void 更安全,因為它可以防止您以未經(jīng)檢查的方式意外使用 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

盡量避免在回調(diào)函數(shù)里定義 optional 參數(shù),除非你覺得實在有必要。

interface Fetcher {getObject(done: (data: any, elapsedTime?: number) => void): void; }

這有一個非常具體的含義:done 回調(diào)可能用 1 個參數(shù)調(diào)用,也可能用 2 個參數(shù)調(diào)用。 作者可能打算說回調(diào)可能不關(guān)心 elapsedTime 參數(shù),但是沒有必要使參數(shù)成為可選參數(shù)來實現(xiàn)這一點——提供接受更少參數(shù)的回調(diào)總是合法的。

重載和回調(diào)函數(shù)

不要編寫僅在回調(diào)數(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ù)調(diào)用時選擇第一個匹配的重載。 當(dāng)較早的重載比較晚的重載“更通用”時,較晚的重載實際上是隱藏的并且無法調(diào)用。

使用可選參數(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; }

總結(jié)

以上是生活随笔為你收集整理的TypeScript 书写 .d.ts 文件的一些注意事项的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。