作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对如何在 Typescript 中对 API 进行建模有点困惑。
我正在尝试对 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'.
那么我应该如何对此进行建模,在模块的命名空间中声明了一个类之后,Typescript 似乎变得有点棘手,并且这些类型都不能存在于它们自身中?
a.b.c.d.e.f()
在 .d.ts
文件中会是什么样子?
最佳答案
一般来说,如果用new
调用某个东西,它就只是一个类。否则就是只是一个普通的对象。我会做类似的事情:
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
在模块导出单个对象时使用(Hexo 类成为模块本身,而不是其中的对象)。
PS:回调类型(实际上是任何类型)可以使用 type
关键字引用。 type
关键字甚至可以取代 interface
关键字...
type someCallback = ( err : Error , resp : HttpResponse ) => Promise<any>
关于javascript - 在 Typescript 声明文件中建模(较长)API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38676629/
我对如何在 Typescript 中对 API 进行建模有点困惑。 我正在尝试对 hexo 进行建模API,例如用法,看起来有点像这样: hexo.extend.tag.register(name,
我是一名优秀的程序员,十分优秀!