【发布时间】:2015-04-04 10:46:13
【问题描述】:
为什么 TypeScript 强制 Get/Set 访问器具有相同的类型? 假设我想要一个返回承诺的属性。
module App {
export interface MyInterface {
foo: ng.IPromise<IStuff>;
}
export interface IStuff {
bar: string;
baz: number;
}
class MyClass implements MyInterface {
private _fooDeferred: ng.IDeferred<IStuff>;
constructor(private $q: ng.IQService) {
this._fooDeferred = this.$q.defer();
}
get foo(): ng.IPromise<IStuff> {
return this._fooDeferred.promise;
}
set foo(value: IStuff) {
this._fooDeferred.resolve(value);
}
}
}
'Get' 和 'Set' 访问器必须具有相同的类型将是来自 TypeScript 的错误消息。
解决方法是将访问器键入 any,但这样我们就失去了静态类型的优势,还不如只写 JS。
get foo(): any {
return this._fooDeferred.promise;
}
set foo(value: any) {
this._fooDeferred.resolve(value);
}
【问题讨论】:
-
你真的想要一个类,其中在读取和写入时属性具有不同的类型?这似乎是对 getter/setter 的滥用。
-
瑞恩,这是我的问题。否则您将如何拥有一个返回承诺的属性?下面史蒂夫芬顿的回答似乎是合理的。
-
由于已解决的承诺不应该被多次解决,即使使用 Steve Fenton 的实现,您也需要防止多次设置属性。
标签: angularjs typescript