hubot
类型定义具有以下类:
declare namespace Hubot {
// ...
class Message {
user: User;
text: string;
id: string;
}
// ...
}
// Compatibility with CommonJS syntax exported by Hubot's CoffeeScript.
// tslint:disable-next-line export-just-namespace
export = Hubot;
export as namespace Hubot;
我想在编写的Message
文件中,从代码中扩展hubot.d.ts
类:
import * as hubot from 'hubot';
declare namespace Hubot {
export class Message {
mentions: string[]
}
}
通过{p>将hubot.d.ts
文件包含在代码中
"files": ["types/custom/hubot.d.ts"]
在tsconfig.json
文件中。
我缺少什么?有什么办法吗?
答案 0 :(得分:3)
hubot.d.ts
应该包含:
// This import serves no purpose except to make the file a module
// (so that the following statement is a module augmentation rather
// than a module declaration) and could be replaced with `export {}`.
import * as hubot from 'hubot';
declare module "hubot" {
interface Message {
mentions: string[]
}
}
需要一个module augmentation才能将声明添加到hubot
模块中。由于Hubot
命名空间被分配为模块的导出,因此对模块进行的任何扩展都将直接针对该命名空间;在扩充中编写另一个namespace Hubot { ... }
会创建一个嵌套的名称空间,这不是您想要的。最后,声明一个类会产生“重复标识符”错误,而声明一个接口足以添加属性。