【发布时间】:2015-02-12 19:44:05
【问题描述】:
我有一个可以在 javascript 中扩展的对象类型
var myObject = Library.LibraryType();
myObject.myExtension = MyExtension();
只要扩展遵循某个接口,LibraryType 就可以用它做有用的事情。
但是我如何在打字稿定义文件中表达这一点?我不希望用户一直将所有内容都投射到<any>。
我想用字典来做。但是编译器抱怨所有其他成员不遵守字典定义。
export interface IExtension {
}
export interface IExtensibleLibraryType {
something: string;
otherthing: (args: number) => void;
[ keyOfExtension: string ]: IExtension;
}
它说所有其他成员都不是IExtension。
我原以为编译器会强制字典成员作为字典mytype['keyOfExtension'] 访问,而所有其他成员都可以使用. 表示法访问?为什么这不是一件事?
有没有办法解决这个问题? 或者我只需要告诉大家一直投到any吗? 或者强制用户在自己的代码中扩展接口(最好的选择,但我敢打赌人们更有可能这样做)?
如果.d.ts 能够像对文档的有用补充一样完整地描述库的 API,我真的很高兴。
【问题讨论】:
标签: module typescript definition typescript1.4