[英]How to properly define *.d.ts (typings) files for plain JavaScript react components
我正在使用Typescript和React。 盡管許多React組件已經帶有預定義的類型,但其中一些卻沒有。 定義*.d.ts
文件,並將其扔進typings
目錄是不是一個大問題。 但是,在JavaScript中,有很多方法可以在模塊中導出內容,並且絕不是統一的。 結果是Typescript編譯器對我的鍵入感到滿意,但是當我使用typescript import
語句進行鍵入時,則在運行時變得undefined
。
有人可以澄清如何為*.d.ts
組件編寫正確的*.d.ts
文件嗎? 特別是,如果原始的未*.d.ts
JavaScript文件,如何在*.d.ts
文件中聲明export
語句...
export class XYZ
? export default class XYZ
? export namespace XYZ
? export default namespace XYZ
? module.exports
嗎? 這里有很多可能性,某種“烹飪食譜”會很好,例如“首先,請始終嘗試方法X,如果X在運行時給您undefined
的內容,請嘗試Y ...”。
Typescript不知道已通過JS導入的模塊。 結果,您需要聲明模塊,然后聲明其導出的成員。
您可以在全局定義文件中或多或少地在源文件中創建成員的方式中聲明成員。 由於我們僅在這里討論模塊,因此我們將跳過環境上下文,而將重點放在模塊上。
給定名為view/alpha.js
文件,其內容為:
export class Alpha {
howdy() {}
}
要么
class Alpha {
howdy() {}
}
module.exports = {
Alpha: Alpha;
}
在定義文件中聲明模塊:
declare module 'view/alpha' {
class Alpha {
howdy() : void;
}
}
給定名為view/beta.js
文件,其內容為:
export default class Beta {
howdy() {}
}
在定義文件中聲明模塊:
declare module 'view/beta' {
export = class Beta {
howdy();
}
}
給定名為view/epsilon
文件,其內容為:
export default class Epsilon {
howdy() {}
}
export class Zeta {
howdy() {}
}
聲明模塊:
declare module 'view/epsilon' {
export default class Epsilon {
howdy() : void;
}
class Zeta {
howdy() : void;
}
}
您提到:
export default namespace XYZ
export namespace XYZ
這不是有效的ES6 。 如果您要引用諸如export Delta
類的東西,其中Delta
包含命名類,則可以將其聲明為:
declare module 'view/gamma' {
namespace Delta {
class Omega {
howdy() : void;
}
}
}
否則,您可以鏈接示例嗎? 我嘗試使用谷歌搜索export default namespace
但沒有得到任何非Typescript示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.