编辑:
换句话说,在.d.ts文件中,以下内容不应产生编译器错误ts2137“类”myClass“未实现接口”iInterface“:
interface IInterface {
someMethod():void;
}
declare module "mod" {
export class MyClass implements IInterface {
constructor();
}
}
因为我没有(并且不能在宣言中)执行任何事情。这是编译器中的一个bug,还是有其他方法/语法来实现上述含义?我认为编译器足够聪明,能够准确地将IOffice的签名包含为MyC类的一部分,而不需要重新声明其方法。
原件:
我正试图为节点组件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' );
更换邦扬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'
意味着我必须重新声明所有扩展接口中所有继承的方法,除了IrimBuffic,这在D.TS文件中似乎有点荒谬。
有人知道“正确”的方式来声明一个环境类,该类实现另一个公共模块中的一个用于消费的接口吗?是吗?
最佳答案
定义它的另一种方法是定义jquery的typescript定义。对于静态成员和实例成员,您有不同的接口。这里有一个完整的样本定义:
interface IExternal {
inheritedMethod():void;
}
interface IRingBuffer extends IExternal {
write():void;
}
// Static functions and constructors
interface IRingBufferStatic{
new():IRingBuffer;
}
declare var RingBuffer:IRingBufferStatic;
declare module "bunyan" {
export var RingBuffer:IRingBufferStatic;
}
// In the second file
import bunyan = require( 'bunyan' );
var rb = new bunyan.RingBuffer();
// you get an error here
rb.badFunc();
Try it online