TypeScript 声明文件模板
- global-modifying-module.d.ts
- global-plugin.d.ts
- global.d.ts
- module-class.d.ts
- module-function.d.ts
- module-plugin.d.ts
- module.d.ts
global-modifying-module.d.ts
//[~库名称~][~可选版本号~]的类型定义
//项目:[~项目名称~]
//定义依据:[~您的姓名~]<[~A URL FOR YOU~]>
/*~这是全局修改模块模板文件。您应该将其重命名为index.d.ts
*~并将其放入与模块同名的文件夹中。
*~例如,如果你在为“super-greeter”写一个文件
*~文件应该是'super greeter/index.d.ts'
*/
/*~注意:如果全局修改模块是可调用或可构造的,则
*~需要将这里的模式与模块类或模块函数中的模式结合起来
*~模板文件
*/
声明全局{
/*~在这里,声明全局命名空间中的内容,或扩展
*~全局命名空间中的现有声明
*/
接口字符串{
fancyFormat(opts:StringFormatOptions):字符串;
}
}
/*~如果您的模块导出类型或值,请照常编写它们*/
导出接口StringFormatOptions{
fancinessLevel:数字;
}
/*~例如,在模块上声明一个方法(除了它的全局副作用外)*/
导出函数doSomething():void;
/*~如果你的模块什么也不导出,你就需要这条线。否则,删除它*/
导出{};
global-plugin.d.ts
//[~库名称~][~可选版本号~]的类型定义
//项目:[~项目名称~]
//定义依据:[~您的姓名~]<[~A URL FOR YOU~]>
/*~此模板显示如何编写全局插件。*/
/*~为原始类型编写声明并添加新成员。
*~例如,这将添加一个带有to重载的“toBinaryString”方法
*~内置数字类型。
interface Number {
toBinaryString(opts?: MyLibrary.BinaryFormatOptions): string;
toBinaryString(callback: MyLibrary.BinaryFormatCallback, opts?: MyLibrary.BinaryFormatOptions): string;
}
*~如果需要声明多个类型,请将它们放在命名空间中
*~以避免在全局命名空间中添加太多内容。
declare namespace MyLibrary {
type BinaryFormatCallback = (n: number) => string;
interface BinaryFormatOptions {
prefix?: string;
padding: number;
}
}
global.d.ts
//[~库名称~][~可选版本号~]的类型定义
//项目:[~项目名称~]
//定义依据:[~您的姓名~]<[~A URL FOR YOU~]>
/*~如果这个库是可调用的(例如,可以作为myLib(3)调用),
*~把电话签名都写在这里。
*~否则,删除此部分。
*/
declare function myLib(a: string): string;
declare function myLib(a: number): number;
/*~如果您希望此库的名称是有效的类型名,
*~你可以在这里做。
*~
*~例如,这允许我们写'var x:myLib';
*~确保这一切都有意义!如果没有,就
*~删除此声明并在下面的命名空间中添加类型。
*/
interface myLib {
name: string;
length: number;
extras?: string[];
}
/*~如果您的库中有对全局变量公开的属性,
*~把它们放在这里。
*~你还应该把类型(接口和类型别名)放在这里。
*/
declare namespace myLib {
//~ We can write 'myLib.timeout = 50;'
let timeout: number;
//~ 我们可以进入 'myLib.version',但不能改变它
const版本:string;
//~ 我们可以通过 'let c = new myLib.Cat(42)'
//~ 或参考,例如 'function f(c: myLib.Cat) { ... }
class Cat {
constructor(n: number);
//~ 我们可以阅读 'c.age' from a 'Cat' instance
readonly age: number;
//~ We can invoke 'c.purr()' from a 'Cat' instance
purr(): void;
}
//~ We can declare a variable as
//~ 'var s: myLib.CatSettings = { weight: 5, name: "Maru" };'
interface CatSettings {
weight: number;
name: string;
tailLength?: number;
}
//~ 我们可以写 'const v: myLib.VetID = 42;'
//~ or 'const v: myLib.VetID = "bob";'
type VetID = string | number;
//~ 我们可以调用 'myLib.checkCat(c)' or 'myLib.checkCat(c, v);'
function checkCat(c: Cat, s?: VetID);
}
module-class.d.ts
//[~库名称~][~可选版本号~]的类型定义
//项目:[~项目名称~]
//定义依据:[~您的姓名~]<[~A URL FOR YOU~]>
/*~这是类模块的模块模板文件。
*~您应该将其重命名为index.d.ts并将其放入与模块同名的文件夹中。
*~例如,如果你在为“super-greeter”写一个文件
*~文件应该是'super greeter/index.d.ts'
*/
/*~请注意,ES6模块不能直接导出类对象。
*~应使用CommonJS样式导入此文件:
*~import x=require('someLibrary');
*~
*~参考文档了解
*~针对ES6模块这一限制的解决方法。
*/
/*~如果此模块是在以下情况下公开全局变量“myClassLib”的UMD模块
*~在模块加载器环境外加载,在此处声明全局。
*~否则,删除此声明。
*/
export as namespace myClassLib;
/*~此声明指定类构造函数函数
*~是从文件导出的对象
*/
export = MyClass;
/*~ 在此类中编写模块的方法和属性 */
declare class MyClass {
constructor(someParam?: string);
someProperty: string[];
myMethod(opts: MyClass.MyClassMethodOptions): number;
}
/*~如果您还想从模块中公开类型,可以
*~把他们放在这个街区。
*/
declare namespace MyClass {
export interface MyClassMethodOptions {
width?: number;
height?: number;
}
}
module-function.d.ts
//[~库名称~][~可选版本号~]的类型定义
//项目:[~项目名称~]
//定义依据:[~您的姓名~]<[~A URL FOR YOU~]>
/*~这是功能模块的模块模板文件。
*~您应该将其重命名为index.d.ts并将其放入与模块同名的文件夹中。
*~例如,如果你在为“超级迎宾员”写一个文件
*~文件应该是'super greeter/index.d.ts'
*/
/*~请注意,ES6模块不能直接导出可调用函数。
*~应使用CommonJS样式导入此文件:
*~import x=require('someLibrary');
*~
*~参考文档了解
*~针对ES6模块这一限制的解决方法。
*/
/*~如果此模块是在以下情况下公开全局变量“myFuncLib”的UMD模块
*~在模块加载器环境外加载,在此处声明全局。
*~否则,删除此声明。
*/
export as namespace myFuncLib;
/*~此声明指定函数
*~是从文件导出的对象
*/
export = MyFunction;
/*~这个例子展示了如何为你的函数设置多个重载*/
声明函数MyFunction(名称:string):MyFunction.NamedReturnType;
声明函数MyFunction(长度:number):MyFunction.LengthReturnType;
/*~如果您还想从模块中公开类型,可以
*~把他们放在这个街区。通常你会想描述
*~函数返回类型的形状;该类型应该
*~在这里声明,如这个例子所示。
*/
declare namespace MyFunction {
export interface LengthReturnType {
width: number;
height: number;
}
export interface NamedReturnType {
firstName: string;
lastName: string;
}
/*~如果模块也有属性,请在此处声明。例如,
*~这项声明表明,这项法规是合法的:
*~ import f = require('myFuncLibrary');
*~ console.log(f.defaultName);
*/
export const defaultName: string;
export let defaultLength: number;
}
module-plugin.d.ts
//[~库名称~][~可选版本号~]的类型定义
//项目:[~项目名称~]
//定义依据:[~您的姓名~]<[~A URL FOR YOU~]>
/*~这是模块插件模板文件。您应该将其重命名为index.d.ts
*~并将其放入与模块同名的文件夹中。
*~例如,如果你在为“super greeter”写一个文件
*~文件应该是'super greeter/index.d.ts'
*/
/*~在此行中,导入此模块添加到的模块*/
import * as m from 'someModule';
/*~ 如果需要,还可以导入其他模块 */
import * as other from 'anotherModule';
/*~ 在这里,声明与上面导入的模块相同的模块 */
declare module 'someModule' {
/*~ 在内部,添加新的函数、类或变量。你可以用
*~ unexported types from the original module if needed. */
export function theNewMethod(x: m.foo): other.bar; /*~ 您还可以从向现有接口添加新属性
*~ 原始模块通过编写接口扩充 */ export interface SomeModuleOptions {
someModuleSetting?: string;
}
/*~ 也可以声明新类型,并将显示为
*~ are in the original module */
export interface MyModulePluginOptions {
size: number;
}
}
module.d.ts
//[~库名称~][~可选版本号~]的类型定义
//项目:[~项目名称~]
//定义依据:[~您的姓名~]<[~A URL FOR YOU~]>
/*~这是模块模板文件。您应该将其重命名为index.d.ts
*~并将其放入与模块同名的文件夹中。
*~例如,如果你在为“super-greeter”写一个文件
*~文件应该是'super greeter/index.d.ts'
*/
/*~如果此模块是在以下情况下公开全局变量“myLib”的UMD模块
*~在模块加载器环境外加载,在此处声明全局。
*~否则,删除此声明。
*/
export as namespace myLib;
/*~ 如果此模块有方法,请将它们声明为函数,如下所示.
*/
export function myMethod(a: string): string;
export function myOtherMethod(a: number): number;
/*~ 您可以通过导入模块来声明可用的类型 */
export interface someType {
name: string;
length: number;
extras?: string[];
}
/*~您可以使用const、let或var声明模块的属性*/
导出const myField:number;
/*~如果虚线名称内有类型、属性或方法
*,在“namespace”中声明它们。
*/
export namespace subProp {
/*~ For example, given this definition, someone could write:
*~ import { subProp } from 'yourModule';
*~ subProp.foo();
*~ or
*~ import * as yourMod from 'yourModule';
*~ yourMod.subProp.foo();
*/
export function foo(): void;
}