编辑:
换句话说,.d.ts文件中的以下内容不应产生编译器错误 TS2137 'Class "MyClass" does not implement interface "IInterface"':
interface IInterface {
someMethod():void;
}
declare module "mod" {
export class MyClass implements IInterface {
constructor();
}
}
因为我没有(也不能在声明中)实施任何东西。这是编译器中的错误还是有其他方式/语法来执行上述暗示?我认为编译器足够聪明,可以准确地将 IInterface 的签名包含在 MyClass 中,并且不需要重新声明其方法。
原来的:
我正在尝试为节点组件 bunyan 编写一个 d.ts。导出实现外部接口的类时遇到问题,特别是扩展节点的 EventEmitter 的 RingBuffer。简化的问题是(在下面的 bunyan.d.ts 文件中):
// this interface declared in <reference..., put inline here for simplicity
interface IExternal {
inheritedMethod():void;
}
interface RingBuffer extends IExternal {
write():void;
}
declare var RingBuffer: {
new():RingBuffer;
}
declare module "bunyan" {
export var RingBuffer;
}
然后在 myNodeApp.js 中使用
/// <references path="bunyan.d.ts" />
import bunyan = require( 'bunyan' );
var rb = new bunyan.RingBuffer();
// compiler doesn't error on this; thinks RingBuffer is type any.
// also, no intellisense to show write() method.
rb.badFunc();
将 bunyan.d.ts 更改为:
declare module "bunyan" {
export class RingBuffer { constructor(); }
}
编译,但使用时同样的问题;没有智能感知,没有编译错误。
将 bunyan.d.ts 更改为
declare module "bunyan" {
export var RingBuffer:RingBuffer;
}
在 myNodeApp.js 中导致编译错误
// error TS2083: Invalid 'new' expression
import rb = new bunyan.RingBuffer();
从 bunyan.d.ts 中删除
declare module "bunyan" {
...
}
在 myNodeApp.js 中导致编译错误
// error TS2071: Unable to resolve external module ''bunyan''
import bunyan = require( 'bunyan' );
改变 bunyan.d.ts
interface IExternal {
inheritedMethod():void;
}
interface IRingBuffer extends IExternal {
}
declare module "bunyan" {
export class RingBuffer implements IRingBuffer {}
}
导致编译错误
// error TS2137: Class "bunyan".RingBuffer declares interface IRingBuffer but
// does not implement it: type '"bunyan".RingBuffer' is missing property
// 'inheritedMethod' from type 'IRingBuffer'
暗示我必须从所有扩展接口重新声明所有继承的方法,除了 IRingBuffer,这在 d.ts 文件中似乎有点可笑
有谁知道在另一个 CommonJS 模块中声明一个实现接口以供消费的环境类的“正确”方法?