【发布时间】:2020-02-22 01:08:49
【问题描述】:
我有一个这样定义的接口和类:
interface Foo {
constructor: typeof Foo;
}
class Foo {
static bar = 'bar';
constructor(data: Partial<Foo>) {
Object.assign(this, data);
}
someMethod() {
return this.constructor.bar;
}
prop1: string;
prop2: number;
}
接口是必需的,以便this.constructor 是强类型的。但是,它破坏了我将普通对象传递给类构造函数的能力:
const foo = new Foo({ prop1: 'asdf', prop2: 1234 });
// Argument of type '{ prop1: string; prop2: number; }' is not assignable to parameter of type 'Partial<Foo>'.
// Types of property 'constructor' are incompatible.
// Type 'Function' is not assignable to type 'typeof Foo'.
// Type 'Function' provides no match for the signature 'new (data: Partial<Foo>): Foo'.
我了解错误消息,但我不知道如何解决它。有什么办法有一个Partial<Foo> 可以让我传递一个普通的对象?这是一个游乐场:
【问题讨论】:
-
不确定你的意图是什么,好像你试图从实例访问静态属性,这是不可能的,接口也是多余的,checkout this
-
谢谢埃里克。您可以通过
this.constructor从实例访问静态属性,这样做并不少见。冗余接口也是必需的,因为您不能在类定义中键入constructor方法。这使用了“接口合并”,这是 TypeScript 的一个特性,也很常见:github.com/microsoft/TypeScript/issues/…
标签: javascript typescript derived-types