А почему не class?
мой код, хочу function Рассказать, что нужен class я тоже могу, как сделать иначе? Собственно, это и есть пример того, что мы сейчас потеряем, перейдя на TypeScript. Вроде бы почти ничего, но между "совсем ничего" и "используй только class если хочешь infer от конструкторов", как по мне — очень большая разница. или подскажите неофиту, не могу найти в доке, должно ж быть просто как-то
Можно просто не использовать this, как я делаю))
нормальный вариант, хозяин — барин ) но это всё ещё не ответ на исходный вопрос, это просто ещё один ответ из серии "используй class"
А strict включен?
да, strict включён, а build ругается не на то, что я хочу
попробуй на playground залить кейс, у меня вообще он не дает применить this внутри функции
да, то же самое
Тогда встречный вопрос - зачем в этой функции тогда тс? Подключайте как джс и в проекте declare сделайте 🤷♂
и это как раз ответ на вопрос - если хочется типизировать, нужно использовать классы / хотя бы функцию, возвращающую объект иначе, как уже выше сказали, это нетипизируемо, тк js слишком динамичен
А на что будет ссылаться this? Откуда TS узнает?
по идее надо взять комбинацию: 1. из того, что в него кладётся в MyConstructorFunction.prototype 2. из тех свойств, которые в this будут добавлены/изменены в самом MyConstructorFunction 3. и если из п. 2 делается return чего-то отличного от this — то это уже совсем другой вопрос
Какой другой вопрос? Это же к this относится
function Kek() {} function pek() { Kek.prototype.pek = “” } if (Math.random() > .5) pek() const kek = new Kek() kek.pek // ?
что в прототип кладётся?)
ого, прям как в ES5
😂 мы тут точно про ТС?
чутка пораньше )
+100 500, пожалуй уже нет )
как бы он у любого function есть, и это просто объект, который попадает в прототип, то есть хранится на следующем уровне цепочки прототипов
Это были связанные между собой вопросы ? тут прототип может меняться, в зависимости от Math.random — непонятно чего мы хотим добиться, чтобы запутать TS? Но да, там по прежнему лежит какой-то объект...
поэтому никак это статически не типизировать, и это нормально
То что в начале треда и сообщили )
Да, связанные вопросы. Ты написал следующее 1. из того, что в него кладётся в MyConstructorFunction.prototype 2. из тех свойств, которые в this будут добавлены/изменены в самом MyConstructorFunction как это сделать в следующем коде? function Kek() {} function pek() { Kek.prototype.pek = “” } if (Math.random() > .5) { pek() const kek = new Kek() console.log(kek.pek) } else { const kek = new Kek() console.log(kek.pek) pek() } чтоб статическая типизация, гарантированный доступ к typeof kek.pek === “string” в первой ветке и ошибка во второй ветке
кек, тоже когда какой то scratch пишу, то юзаю Kek и созвучное с ним
Biba & Boba ❤️
тут есть запутывание тёплого с мягким Kek — тёплое Kek.prototype — мягкое Какая разница, что лежит у Kek в свойстве .prototype? Оно же всегда есть typeof "object". Значит оно содержит перечислимые ключи, или те ключи, которые "дальше" в цепочке прототипов? Т.е., мы же понимаем, что зависимость типов свойств от ответа на вопрос, в какую из веток if(Math.random()>.5) мы зашли не изменяет того, что -- это Object.getPrototypeOf(kek) будет тем, что лежит в .prototype у Kek. Т.е., да, у нас ветка в Execution Path, но принципиально это ничего не меняет. Понятно, что это очень сложно infer~"вывести". мне тут в соседнем чате ещё подсказали, что это allowJS видимо https://www.typescriptlang.org/docs/handbook/type-checking-javascript-files.html#constructor-functions-are-equivalent-to-classes
а если не секрет, в чём такая приверженность к низкоуровневым прототипам?
Практической ценности пока никакой, так, эксперименты just for fun. Эмм... точней, можно же в принципе так писать код, хочется избавиться от необходимости везде и всюду описывать типы для конструкторов. Вот думаю как это сделать и на legacy коде тоже. могу кинуть ссылку на проблему
при этом оставляя его legacy)
да, не то, чтобы прям, но да, хотя бы сконструировать что-нибудь, чем это всё можно переобуть быстро
Так я выше предложил declare для такого кода (и не трогать сам код) - или планируется этот код менять, оставляя его в таком виде? 😏
Сначала хотелось простой вещи, чтобы IDE теперь подсвечивала мои интерфейсы, чтобы быть идеологически совместимым с остальными ребятами, которые хотят видеть в IDE то, что они привыкли видеть. Поэтому переписал всё на AnyScript. Стал описывать свои интерфейсы. Пришёл к выводу, что мне не хватает компетенций в TS, но найти толкового решения не смог. Задал вопрос тут )
Тратишь время на поиск решения по ТС вместо переписывания в угоду простоте?
не, не так, оно не работает иначе поэтому пытаюсь себе в TS что надо делать костыли надоели костыли
Обсуждают сегодня