【发布时间】:2018-07-27 07:05:00
【问题描述】:
一个类被修饰为具有foo静态属性:
interface IFoo {
foo: boolean;
}
function foo<T>() {
return (Class: T): T & IFoo => Object.assign(Class, { foo: true });
}
@foo<typeof Bar>()
class Bar { }
const Baz: IFoo = Bar;
console.log(Baz.foo);
这会导致错误:
类型“typeof Bar”不可分配给类型“IFoo”。
TypeScript 打字系统似乎忽略了 Bar 被修饰的事实。
我知道装饰器存在某些类型问题。这里有什么解决方法?
【问题讨论】:
-
TypeScript 是结构化类型的,这意味着如果将静态属性
foo添加到Bar它可以分配给IFoo类型的变量,不需要装饰器。 -
没错。我们的想法是不这样做,而是使用装饰器(IFoo 可能比单个属性更复杂)。
标签: typescript