在 Typescript 声明文件中建模(长篇)API
Modelling (long-ish) APIs in Typescript declaration files
我有点困惑你应该如何在 Typescript 中建模 APIs。
我正在尝试对 hexo API 进行建模,例如用法,看起来有点像这样:
hexo.extend.tag.register(name, function(args, content){
// ...
}, options);
到目前为止我得到的东西看起来像这样:
//hexo.d.ts
declare module 'hexo' {
namespace extend {
export class tag {
public register: _register;
}
}
}
declare class _register {
name: string;
callback(args: any, content: any);
options: _options;
}
declare class _options {
ends: boolean;
}
但是,我遇到了如下问题:
Property 'register' does not exist on type 'typeof tag'.
那么我应该如何建模,在模块的命名空间中声明 class 之后,Typescript 似乎变得有点棘手,并且这些类型中的 none 可以存在于其中他们自己?
a.b.c.d.e.f()
在 .d.ts
文件中会是什么样子?
一般来说,用new
调用的东西只有class。否则就是
只是一个普通的对象。我会这样做:
declare module 'hexo' {
class Hexo {
constructor( cwd, opts )
load() : Promise<any>
extend : {
console : any //declare me later, set any for now
// etc
tag : {
register(name:string, cb: (args,content) => void , opts : any)
}
}
}
export = Hexo;
}
export = something
当模块导出单个对象时使用(class Hexo 成为模块本身,而不是其中的对象)。
PS:可以使用 type
关键字引用回调类型(实际上是任何类型)。 type
关键字甚至可以替换 interface
关键字...
type someCallback = ( err : Error , resp : HttpResponse ) => Promise<any>
我有点困惑你应该如何在 Typescript 中建模 APIs。
我正在尝试对 hexo API 进行建模,例如用法,看起来有点像这样:
hexo.extend.tag.register(name, function(args, content){
// ...
}, options);
到目前为止我得到的东西看起来像这样:
//hexo.d.ts
declare module 'hexo' {
namespace extend {
export class tag {
public register: _register;
}
}
}
declare class _register {
name: string;
callback(args: any, content: any);
options: _options;
}
declare class _options {
ends: boolean;
}
但是,我遇到了如下问题:
Property 'register' does not exist on type 'typeof tag'.
那么我应该如何建模,在模块的命名空间中声明 class 之后,Typescript 似乎变得有点棘手,并且这些类型中的 none 可以存在于其中他们自己?
a.b.c.d.e.f()
在 .d.ts
文件中会是什么样子?
一般来说,用new
调用的东西只有class。否则就是
只是一个普通的对象。我会这样做:
declare module 'hexo' {
class Hexo {
constructor( cwd, opts )
load() : Promise<any>
extend : {
console : any //declare me later, set any for now
// etc
tag : {
register(name:string, cb: (args,content) => void , opts : any)
}
}
}
export = Hexo;
}
export = something
当模块导出单个对象时使用(class Hexo 成为模块本身,而不是其中的对象)。
PS:可以使用 type
关键字引用回调类型(实际上是任何类型)。 type
关键字甚至可以替换 interface
关键字...
type someCallback = ( err : Error , resp : HttpResponse ) => Promise<any>