在 *.d.ts 文件中有什么区别:
declare module "m1" {
}
和
declare module m1 {
}
?
还有什么区别:
declare module "m1" {
export class c1 {
constructor(value: string);
}
}
和
declare module "m1" {
export interface c1 {
new(value: string);
}
}
最佳答案
引号中模块名称的唯一不同是它们只能用于环境声明。当您使用带引号的名称时,您是在描述一个将被模块加载的模块(使用 require
)。
类和接口(interface)之间的区别在于,对于类,您将被允许直接创建新实例:
var instance = new m1.c1('val');
对于接口(interface),您需要另外提供一个输入到接口(interface)的变量,以便创建一个新的接口(interface):
declare module m1 {
interface c1 {
new(value: string);
}
var example: m1.c1;
}
// Not allowed
// var instance = new m1.c1('val');
// Allowed
var instance = new m1.example('val');
使用 new m1.c1('val')
会得到错误:
The property 'c1' does not exist on value of type 'typeof m1'.
关于typescript - TypeScript 中的接口(interface) + 新 vs 类 + 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21669400/