如何创建代表以下JavaScript API的.d.ts文件?
Loader
是一个未全局导出的类loader
全局导出,是Loader
loader.Loader
是Loader
类本身Loader
有一个静态方法create
,用于创建Loader
所以基本上loader
的行为类似于包含类Loader
的命名空间,但也是Loader
的实例。以下方法不起作用,因为TypeScript不会将名称空间与值合并:
declare namespace loader {
class Loader {
id: number;
name: string;
load(url: string): any;
static create(name: string, parent?: Loader): Loader;
}
}
// This doesn't work, because a namespace cannot be merged with a value:
declare const loader: loader.Loader;
使用JavaScript中的API如下所示:
// Call load() on the default Loader instance
loader.load('/foo/index');
// loader.Loader is a class, and loader is an instance of it
if(loader instanceof loader.Loader) {
console.log('Yes, loader is a Loader');
}
// Create a new Loader instance
var myLoader = loader.Loader.create('my-loader');
// Call load on this Loader instance
myLoader.load('/bar/something');
// myLoader is also an instance loader.Loader
if(myLoader instanceof loader.Loader) {
console.log('Yes, myLoader is a Loader');
}
答案 0 :(得分:1)
我不太明白当你说" Loader没有全球出口时你是什么意思"和#34;装载机全球出口"。一件事可以从模块中导出,也可以在其他模块中导入,或者不导出 - 没有"全局导出"的概念。另一方面,可以声明一个东西存在于全局命名空间中,就像全局变量一样,可以在每个模块中使用,而无需显式导入任何内容。
如果希望从模块导出loader
具有额外Loader
属性,则无需声明命名空间 - 在声明{时,可以使用交集类型添加Loader
属性{1}}实例:
<强> loader.d.ts 强>
loader
在导入declare class Loader {
id: number;
name: string;
load(url: string): any;
static create(name: string, parent?: Loader): Loader;
}
declare const loader: Loader & { Loader: typeof Loader };
export {loader}; // Loader is not exported
之后编译所有示例:
loader