169 похожих чатов

Привет ) Подскажите неофиту, что можно сделать, чтобы строчки 9 и

10 корректно показывали, что свойства другого типа ?

Сейчас ничего не пишет, типа корректно всё.

Желательно, конечно, ничего не делать, т.к. infer должен сработать как бы сам.

36 ответов

16 просмотров

А почему не class?

went-out Автор вопроса

мой код, хочу function Рассказать, что нужен class я тоже могу, как сделать иначе? Собственно, это и есть пример того, что мы сейчас потеряем, перейдя на TypeScript. Вроде бы почти ничего, но между "совсем ничего" и "используй только class если хочешь infer от конструкторов", как по мне — очень большая разница. или подскажите неофиту, не могу найти в доке, должно ж быть просто как-то

Можно просто не использовать this, как я делаю))

went-out Автор вопроса

нормальный вариант, хозяин — барин ) но это всё ещё не ответ на исходный вопрос, это просто ещё один ответ из серии "используй class"

А strict включен?

went-out Автор вопроса

да, strict включён, а build ругается не на то, что я хочу

попробуй на playground залить кейс, у меня вообще он не дает применить this внутри функции

went-out Автор вопроса

да, то же самое

Тогда встречный вопрос - зачем в этой функции тогда тс? Подключайте как джс и в проекте declare сделайте 🤷‍♂

и это как раз ответ на вопрос - если хочется типизировать, нужно использовать классы / хотя бы функцию, возвращающую объект иначе, как уже выше сказали, это нетипизируемо, тк js слишком динамичен

А на что будет ссылаться this? Откуда TS узнает?

went-out Автор вопроса

по идее надо взять комбинацию: 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

😂 мы тут точно про ТС?

went-out Автор вопроса

чутка пораньше )

went-out Автор вопроса

+100 500, пожалуй уже нет )

went-out Автор вопроса

как бы он у любого function есть, и это просто объект, который попадает в прототип, то есть хранится на следующем уровне цепочки прототипов

went-out Автор вопроса

Это были связанные между собой вопросы ? тут прототип может меняться, в зависимости от 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 ❤️

went-out Автор вопроса

тут есть запутывание тёплого с мягким 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

а если не секрет, в чём такая приверженность к низкоуровневым прототипам?

went-out Автор вопроса

Практической ценности пока никакой, так, эксперименты just for fun. Эмм... точней, можно же в принципе так писать код, хочется избавиться от необходимости везде и всюду описывать типы для конструкторов. Вот думаю как это сделать и на legacy коде тоже. могу кинуть ссылку на проблему

при этом оставляя его legacy)

went-out Автор вопроса

да, не то, чтобы прям, но да, хотя бы сконструировать что-нибудь, чем это всё можно переобуть быстро

Так я выше предложил declare для такого кода (и не трогать сам код) - или планируется этот код менять, оставляя его в таком виде? 😏

went-out Автор вопроса

Сначала хотелось простой вещи, чтобы IDE теперь подсвечивала мои интерфейсы, чтобы быть идеологически совместимым с остальными ребятами, которые хотят видеть в IDE то, что они привыкли видеть. Поэтому переписал всё на AnyScript. Стал описывать свои интерфейсы. Пришёл к выводу, что мне не хватает компетенций в TS, но найти толкового решения не смог. Задал вопрос тут )

Тратишь время на поиск решения по ТС вместо переписывания в угоду простоте?

went-out Автор вопроса

не, не так, оно не работает иначе поэтому пытаюсь себе в TS что надо делать костыли надоели костыли

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта