编辑:
换句话说,在.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

08-04 15:09