Как описать статический метод, который возвращает конструктор подкласса с заданными реквизитами в своем прототипе?Javascript

Форум по Javascript
Ответить Пред. темаСлед. тема
Anonymous
 Как описать статический метод, который возвращает конструктор подкласса с заданными реквизитами в своем прототипе?

Сообщение Anonymous »

Я пытаюсь найти решение для печати существующего кода JS с использованием файлов объявлений D.TS . У меня есть модельный класс, который использует некоторые метапрограммирующие вещи, имея статический метод, который инициализирует новый конструктор класса с пользовательскими реквизитами в своем прототипе. Это прекрасно работает, но я не могу понять, как его напечатать, чтобы иметь работу автозаполнения и проверки типов. Пример реже настолько упрощен.

Код: Выделить всё

class Model {
constructor(schema) {
Object.assign(this, schema);
}

static define(prototype) {
const Subclass = class extends this {

}
// in reality, I attach getters/setters here with some logic using defineProperties
Object.assign(Subclass.prototype, prototype);

return Subclass;
}
}

class MyModel extends Model.define({
foo: 'str' // initialization schema
}) {

}

// const MyModel2 = MyModel.define(...)

const schema = new MyModel({ bar: 2});
console.log(schema.foo);
console.log(schema.bar);

< /code>
Так что я не вижу, как возвращать класс, который расширяет это, и назначает новые реквизиты на его прототип. Кажется, мне нужно что-то подобное:
(упрощенный D.TS Pseudocode) < /p>
type Constructor = new (...args: any[]) => T;

class Model {
static define(this: Constructor, prototypeProps: P): class extends T {[key in keyof prototypeProps]: prototypeProps[key]}
}
К сожалению, я не могу найти что -то подобное в TS, чтобы заставить его работать.


Подробнее здесь: https://stackoverflow.com/questions/794 ... h-given-pr
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Javascript»