взяты именно из переданного в create дженерика, а не напрямую из classA.
extend от самого себя?🤨
Я просто упростил по максимуму, но суть осталась. Дело в том, что classA может расширять другие классы и те другие классы могут вызывать статический метод create. К примеру, classB.create(...args). Нужно, чтобы сработал type inference для метода create и в него можно было бы передавать все те же самые аргументы, которые и в сам конструктор.
Все равно не очень понятно :) Можно пример как это должно работать? Сейчас получается рекурсивный extend + метод ведь статический, значит нужный класс нужно передавать самому, либо убрать static
Не нужно передавать нужный класс самому. В статических методах работает this (ссылка на класс).
В общем, нужно сделать так, чтобы в create передовалось все тоже самое, что и в конструктор класса.
https://www.typescriptlang.org/play?#code/C4TwDgpgBAwg9gOwM7AE4FcDGw6oIKoDmSAPACoB8UAvFGVBAB7AQIAmSUCEA7lABQA6YQEMiSAFxQAlggBmEVFACqAShpURCEFAD8KqFO4A3RQCgzmADYikna7aR4oAbzNQomRCgzZc-MUIARiktEAAaKECAJlDtdRcAXwsPFBFgaUxPVAh0iCFRcSl4ZDQsHHxxElBIODlPGzs8CgT3Dygc4HRUBC5eKGAAC2kkAsFApFU25OTLb2ABiBQaBsc8QUwcvP4AZkiAFimgA
Эмм... Не совсем то) нужно, чтобы через дженерик передлвался classA, а не напрямую. Дело в том, что вместо classA может быть classB, который в конструкторе будет ещё дополнительные опции принимать.
Можно пример? Есть ли тогда вообще смысл в такой задаче? Не легче тогда сделать какой-то абстрактный класс Creatable
class classA { constructor(arg: any, arg2: any) {} static create<P extends any[], T extends classA>(this: new (...args: P) => T, ...opts: P) { return new this(...opts) } }
Обсуждают сегодня