模块:类
例如,当你想要处理看起来像这样的 JavaScript 代码时:
ts
const Greeter = require("super-greeter");
const greeter = new Greeter();
greeter.greet();要处理通过 UMD 和模块的导入:
ts
// Type definitions for [~THE LIBRARY NAME~] [~OPTIONAL VERSION NUMBER~]
// Project: [~THE PROJECT NAME~]
// Definitions by: [~YOUR NAME~] <[~A URL FOR YOU~]>
/*~ 这是类模块的模块模板文件。
*~ 你应该将其重命名为 index.d.ts,并放在与模块同名的文件夹中。
*~ 例如,如果你正在为 "super-greeter" 编写文件,此
*~ 文件应为 'super-greeter/index.d.ts'
*/
// 注意,ES6 模块不能直接导出类对象。
// 此文件应使用 CommonJS 风格导入:
// import x = require('[~THE MODULE~]');
//
// 或者,如果启用了 --allowSyntheticDefaultImports 或
// --esModuleInterop,此文件也可以作为默认导入导入:
// import x from '[~THE MODULE~]';
//
// 请参考 TypeScript 文档
// https://www.typescriptlang.org/docs/handbook/modules.html#export--and-import--require
// 以了解针对 ES6 模块此限制的常见解决方法。
/*~ 如果此模块是一个 UMD 模块,在非模块加载器环境中加载时
*~ 会暴露一个全局变量 'myClassLib',请在此处声明该全局变量。
*~ 否则,删除此声明。
*/
export as namespace myClassLib;
/*~ 此声明指定类构造函数
*~ 是从文件导出的对象
*/
export = Greeter;
/*~ 在此类中编写模块的方法和属性 */
declare class Greeter {
constructor(customGreeting?: string);
greet: void;
myMethod(opts: MyClass.MyClassMethodOptions): number;
}
/*~ 如果你也想从模块中暴露类型,你可以
*~ 将它们放在此块中。
*~
*~ 注意,如果你决定包含此命名空间,则模块可能被
*~ 错误地导入为命名空间对象,除非
*~ --esModuleInterop 已打开:
*~ import * as x from '[~THE MODULE~]'; // 错误!不要这样做!
*/
declare namespace MyClass {
export interface MyClassMethodOptions {
width?: number;
height?: number;
}
}