回答
這些是declaration files,或者有時它們在網絡上被稱爲definition files
。
我會用示例說明爲什麼需要這些文件。
假設,你有一個lib.js
庫與f
功能。
"use strict";
function f() {
}
exports.f = f;
該庫可與其他js
文件一起使用。例如。從main.js
使用:
var f = require('./lib').f;
f();
但要以打字稿發展,就需要使用此功能,所以在你的index.ts
你寫了以下內容:
import {f} from './lib';
但打字稿編譯器會給你一個錯誤:
Error:(1, 17) TS2307:Cannot find module './lib'.
這是因爲打字稿無法讀取js
文件。所以你需要告訴打印機編譯器關於你的模塊和函數。當然,你不想重寫打字稿中的整個庫。但是有一個解決方案 - 聲明文件。您可以通過把創建的lib.js
聲明文件中使用函數f
在index.ts
以下爲lib.d.ts
文件:
export declare function f(): void;
現在都將正確編譯。如果您使用的是TypeScript,則可以通過tsconfig.json
文件中的"declaration": true,
或tsc
中的-d
選項自動生成這些文件。
當您在打字稿編譯時間,而不是原來的.ts
文件,如果需要他們
所以d.ts
文件用於沿着他們的JavaScript同行(文件):
- 你希望你的lib寫在JavaScript中供其他人使用 在TypeScript中寫入
- 您想要使用JavaScript中編寫的lib 打字稿項目
有時候,兩者ts
和d.ts
文件都可用,但開發商的動產僅暴露d.ts
文件。這是angular2
團隊爲其npm
存儲庫選擇的方法。
.ts
是一個TypeScript代碼文件。 .d.ts
是一個declaration file,通常用於定義非TypeScript API的類型(如DOM或jQuery)。
.d.ts文件通常表示類型定義文件。一般來說,對於已經存在於JavaScript中的庫,沒有打印源代碼。 .ts文件將成爲您的打字稿文件
d.ts文件僅包含各種現有JavaScript庫的函數,道具等的定義。 (代表絕對鍵入的腳本)
.ts文件是您在其上開發並轉換爲js文件的文件。 (代表鍵入的腳本)
.d.ts文件不能包含代碼,這會在編譯期間生成JavaScript代碼。它只是用於定義(通常是外部javascrip庫的定義)。例如,在.d.ts文件中沒有「聲明」修飾符的情況下定義「名稱空間」是錯誤的。
- 1. Typescript 2.0錯誤:內部版本:文件'en-US'的未知擴展名。只允許.ts和d.ts擴展
- 2. Typescript:使用lib.core.es6.d.ts
- 3. 如何擴展在外部庫d.ts中聲明的接口?
- 4. Typescript .d.ts編譯錯誤
- 5. TypeScript 2.1+ tsconfig擴展
- 6. 我想開發一個Visual Studio擴展,就像TypeScript擴展
- 7. 如何擴展Typescript接口?
- 8. 在TypeScript中擴展HTMLElement
- 9. TypeScript + ES6 + .system.js + d.td +擴展
- 10. 在TypeScript中擴展數組
- 11. 從TypeScript擴展數組
- 12. Typescript包含擴展方法
- 13. 在.d.ts文件中定義的擴展接口
- 14. 在Typescript中擴展抽象類
- 15. 在Angular2中擴展模塊TS類型
- 16. 角2:http.get不明白TS擴展
- 17. Visual Studio + ASP.NET Core + TypeScript - 誰編譯* .ts?
- 18. 在TypeScript中擴展Kendo UI窗口
- 19. TypeScript:在.d.ts中的函數別名
- 20. Typescript error TS1005:';'預期。 TS v1.8.10
- 21. TypeScript DefinitelyTyped Ember.js d.ts不會編譯
- 22. .ts文件不被視爲TypeScript模塊
- 23. 如何在TypeScript中生成「* .d.ts」?
- 24. 爲spin.js生成Typescript .d.ts文件
- 25. 如何創建「正確的」TypeScript .d.ts?
- 26. 使用Awesome Typescript Loader處理.d.ts文件
- 27. mapbox-gl-draw的Typescript定義d.ts
- 28. TypeScript編譯錯誤「未知的文件擴展名」
- 29. Typescript擴展關鍵字不工作
- 30. 模塊中的TypeScript擴展對象
所以,據我所知,如果我正在開發打字稿庫,我不需要創建任何'.d.ts'文件,不是嗎? – Jordi
如果你希望其他使用** javascript **而不是打字機的人來使用你的庫,你**需要提供'd.ts'文件。但正如我在我的回答中提到的那樣,您不需要編寫它們,它們將由打字機編譯器自動生成。 –
可能是一個noob問題,但是「你希望你的用JavaScript編寫的lib被其他在TypeScript中編寫的用戶使用」與「如果你希望其他用JavaScript編寫而不是打字的用戶使用你的庫,你需要提供d.ts文件「。是否爲Typescript開發人員提供的聲明文件可以幫助他們消費第三方JS文件;主要以intellisense的形式出現,並且在你提供的優秀例子中? –