- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
type User = {
status: 'lamer' | 'junior' | 'govnokoder';
login: string;
iq: number;
}
type ChangeListener<T, K extends keyof T> = {
name: `${K & string}_Listener`;
on(newValue: T[K])
}
const UserIqListener: ChangeListener<User, 'iq'> = {
name: "iq_Listener", //ничто другое не скомпилируется
on(event: number) { //понятно, что string тут не скомпилируется
}
}
const UserStatusListener: ChangeListener<User, 'status'> = {
name: "status_Listener",
on(newValue: User["status"]) {
switch (newValue) {
case "govnokoder": { //понятно, что неверный тип тут не скомпилируется
}
}
}
}
TS компилируется в JS
Сишка тоже во что-то компилируется, можно даже в JS
Однако сишка есть, а TS нету
Можно тогда еще заводить по отдельному языку для всяких вариаций крестопараши, типа С++98, C++11, GNU C++98, GNU C++11, С++98 с буустом, C++98 с хуюстом, С++11 с бустом, C++11 с хуюстом, всякие там вижуалстудиевские кресты и так далее
> типизационная надстройка
Какие-то не очень точные определения.
> Любой JS код является валидным кодом для TS.
Во-первых нет:
является валидным JS, но не валдиным TS.
Во-вторых код на сишке в большинстве случаев является валидным кодом для С++ и ObjC. Однако они у нас есть, почему?
чтобы можно было нагугленный кот копипастить к себе
Кроме того в нем забавная структурая типизация, паттерн матчинг, годный вывод типов, и прочие нехарактерные для мейнстрим говна штуки
ну собссно в этом коде видн
А ну
почти патрнмтчнг
https://en.wikipedia.org/wiki/Glasgow_Haskell_Compiler
>The back end of the compiler transforms Core code into an internal representation of C--...
какой костылек )))
Значит ли это, что C++ язык ненастоящий?
Отвратительня. Снячала джаваскриптеры использовали строки в качестве enum'ов (ня в последнюю очередь потому, что стандартных и удобных enum'ов ня было), а теперь эту говнопрактику узаконили аж в типизации.
И сразу дать конечным пользователям передавать _любую_ петушню для их нужд, просто игнорировать её в своей библиотеке - это збс. Хоть через десять лет для эдж-кейса эту библиотеку пользуй - она все равно костылей не потребует.