У меня есть интерфейс и класс, определенные следующим образом:
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>
, который позволяет мне передать простой объект? Вот детская площадка:
this.constructor
, и это не редкость. Резервный интерфейс также необходим, потому что вы не можете ввести методconstructor
в определении класса. При этом используется слияние интерфейсов, которое является функцией TypeScript и также не редкость: github .com/microsoft/TypeScript/issues/ - person Ryan Wheale   schedule 25.10.2019