7

TypeScript为我的服务结果创建了一个界面。现在我想为里面的两个函数定义一个基本功能。问题是我得到一个错误:

“支持”类型的值不存在“服务结果”属性。

WebStorm用于开发(VS2012让我紧张,因为大型项目冻结 - 等待更好的集成:P)。

这是我的做法:

module Support {
    export interface ServiceResult extends Object {
        Error?: ServiceError;
        Check?(): void;
        GetErrorMessage?(): string;
    }
}

Support.ServiceResult.prototype.Check = () => {
   // (...)
};

Support.ServiceResult.prototype.GetErrorMessage = () => {
   // (...)
};

我也尝试将我的原型移动到模块中,但同样的错误仍然......(当然我删除了Support.前缀)。

4

2 回答 2

9

您不能对接口进行原型设计,因为编译后的 JavaScript 根本不会发出与接口相关的任何内容。该接口纯粹是为了编译时使用而存在的。看看这个:

这个打字稿:

interface IFoo {
    getName();
}

class Foo implements IFoo {
    getName() {
        alert('foo!');
    }
}

编译为此 JavaScript:

var Foo = (function () {
    function Foo() { }
    Foo.prototype.getName = function () {
        alert('foo!');
    };
    return Foo;
})();

结果根本没有IFoo- 这就是您收到该错误的原因。通常你不会原型化一个接口,你会原型化一个实现你的接口的类。

您甚至不必自己编写原型,只需将接口实现为类就足够了,TypeScript 编译器会为您添加原型。

于 2013-03-11T14:20:37.887 回答
7

看起来您正在尝试将实现添加到接口 - 这是不可能的。

您只能添加到一个真正的实现,例如一个类。您也可以决定只将实现添加到类定义中,而不是直接使用prototype.

module Support {
    export interface ServiceResult extends Object {
        Error?: ServiceError;
        Check?(): void;
        GetErrorMessage?(): string;
    }

    export class ImplementationHere implements ServiceResult {
        Check() {

        }

        GetErrorMessage() {
            return '';
        }
    }
}

Support.ImplementationHere.prototype.Check = () => {
   // (...)
};

Support.ImplementationHere.prototype.GetErrorMessage = () => {
   // (...)
};
于 2013-03-11T14:18:42.937 回答