Class TypeScript 0.9.1 CommonJS:是否正确声明了实现外部接口的导出环境类?

Class TypeScript 0.9.1 CommonJS:是否正确声明了实现外部接口的导出环境类?,class,interface,typescript,commonjs,ambient,Class,Interface,Typescript,Commonjs,Ambient,编辑: 换句话说,.d.ts文件中的以下内容不应产生编译器错误TS2137“类“MyClass”未实现接口“IIInterface”: 因为我没有(也不能在声明中)实现任何东西。这是编译器中的一个bug,还是有其他方法/语法来实现上面的含义?我认为编译器足够聪明,能够准确地将IInterface的签名作为MyClass的一部分,而不需要重新声明其方法 原件: 我正试图为节点组件bunyan编写一个d.ts。导出实现外部接口的类时遇到问题,特别是扩展节点的EventEmitter的RingBuff

编辑:

换句话说,.d.ts文件中的以下内容不应产生编译器错误TS2137“类“MyClass”未实现接口“IIInterface”:

因为我没有(也不能在声明中)实现任何东西。这是编译器中的一个bug,还是有其他方法/语法来实现上面的含义?我认为编译器足够聪明,能够准确地将IInterface的签名作为MyClass的一部分,而不需要重新声明其方法

原件:

我正试图为节点组件bunyan编写一个d.ts。导出实现外部接口的类时遇到问题,特别是扩展节点的EventEmitter的RingBuffer。问题简化如下(在下面的bunyan.d.ts文件中):

编译,但使用时出现相同问题;没有智能感知,没有编译错误


将bunyan.d.ts更改为

declare module "bunyan" {
    export var RingBuffer: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();
// error TS2083: Invalid 'new' expression
import rb = new bunyan.RingBuffer();
// error TS2071: Unable to resolve external module ''bunyan''
import bunyan = require( 'bunyan' );

从bunyan.d.ts移除

declare module "bunyan" {
    ...
}
interface IExternal {
    inheritedMethod():void;
}
interface IRingBuffer extends IExternal {
}

declare module "bunyan" {
    export class RingBuffer implements IRingBuffer {}
}
导致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();
// error TS2083: Invalid 'new' expression
import rb = new bunyan.RingBuffer();
// error TS2071: Unable to resolve external module ''bunyan''
import bunyan = require( 'bunyan' );

更换班扬d.ts

declare module "bunyan" {
    ...
}
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模块中使用的接口的环境类吗?

另一种定义它的方法是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();

谢谢你。编译器的错误到底是什么?我希望在d.ts文件中声明一个类来实现一个接口,而不必在类声明中重新声明接口。如果在声明中我说'class MyClass implements IInterface',它的IInterface接口签名应该是隐含的,而不必重新键入…经过进一步的调查,我错了。使用解决方案更新了答案:)这解释了为什么继承的成员声明在环境声明中是必须的。就是这样!谢谢你,非常感谢。