[英]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.