全局库模版
想要具体的模版可以看官网链接 这里就直接拿官网的模板展示一下怎么写全局库/变量的类型定义
// declare 关键字能让你给变量定义,而不必进行赋值
// 全局函数写法
declare function myLib(a: string): string;
declare function myLib(a: number): number;
// 全局接口写法
interface myLib {
name: string;
length: number;
extras?: string[];
}
// 具有全局作用域写法
declare namespace myLib {
let timeout: number; // 可以赋值 'myLib.timeout = 50;'
const version: string; // 只读 'myLib.version'
// 类的写法
// 创建:'let c = new myLib.Cat(42)'
// 引用:'function f(c: myLib.Cat) { ... }'
class Cat {
constructor(n: number);
readonly age: number; // 读取实例属性 'c.age'
purr(): void; // 调用实例方法 'c.purr()'
}
// 具有作用域的接口 'var s: myLib.CatSettings = { weight: 5, name: "Maru" };'
interface CatSettings {
weight: number;
name: string;
tailLength?: number;
}
// 具有作用域的类型 'const v: myLib.VetID = 42;' 或者 'const v: myLib.VetID = "bob";'
type VetID = string | number;
// 具有作用域的函数 'myLib.checkCat(c)' or 'myLib.checkCat(c, v);'
// 作用域内部的定义可以直接引用,无需添加作用域前缀
function checkCat(c: Cat, s?: VetID): void;
// 作用域套娃
namespace nestedLib {
type Dog = string // 'const d:myLib.nestedLib.Dog = "someDog";'
// 在引用父级作用域的东西也不用前缀,就和JS函数作用域一样
// 'const v:myLib.nestedLib.DogVetID = "someID";'
type DogVetID = VetID;
}
}
// 另一种套娃的写法是
declare namesapce myLib.nestedLib2 {
// ...
}