ЙажаСценарий / Говнокод #27350 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 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": { //понятно, что неверный тип тут не скомпилируется

            }
        }
    }

}

Почему у нас нет "TypeScript"?

Запостил: MAKAKA MAKAKA, (Updated )

Комментарии (38) RSS

    • По той же причине, по которой отдельно нет препроцессора сишки.
      Ответить
      • не понимаю, чем сишка отличается от TS
        TS компилируется в JS
        Сишка тоже во что-то компилируется, можно даже в JS

        Однако сишка есть, а TS нету
        Ответить
        • Сишка-то это более полноценный язык, синтаксически и семантически отличный от ассемблера, а тайпскрипт это типизационная надстройка над JS-ом. Любой JS код является валидным кодом для TS.

          Можно тогда еще заводить по отдельному языку для всяких вариаций крестопараши, типа С++98, C++11, GNU C++98, GNU C++11, С++98 с буустом, C++98 с хуюстом, С++11 с бустом, C++11 с хуюстом, всякие там вижуалстудиевские кресты и так далее
          Ответить
          • >более полноценный язык
            > типизационная надстройка

            Какие-то не очень точные определения.

            > Любой JS код является валидным кодом для TS.
            Во-первых нет:
            function foo(bar) {
                
            }

            является валидным JS, но не валдиным TS.

            Во-вторых код на сишке в большинстве случаев является валидным кодом для С++ и ObjC. Однако они у нас есть, почему?
            Ответить
            • ОБЖ Си изначально задумывался так
              чтобы можно было нагугленный кот копипастить к себе
              Ответить
          • Хочу чтобы как встарь был выбор разных языков: Visual C++, Broland C++, Watson C++. Устроили какой-то сосиализм, блин.
            Ответить
          • дартом и кофе никто почти не пользуется, а TS сейчас дефакто практически для фронтэндщины.

            Кроме того в нем забавная структурая типизация, паттерн матчинг, годный вывод типов, и прочие нехарактерные для мейнстрим говна штуки

            ну собссно в этом коде видн
            Ответить
                  • а разве на строке 20 мы не видим патрматчниг?
                    Ответить
                    • на 20 строчке мы видим свитч который можно назвать поттер-матчингом только с сильной натяжкой
                      Ответить
                      • там свитч по типу (ну и что, что для определения типа используется поле?) с автоматическим кастом

                        почти патрнмтчнг
                        Ответить
                      • Ну это паттерн-матчинг наверное, но какой-то кишками наружу, впрочем как и ооп в js и пистоне.
                        Ответить
                          • Я вижу, я про сам подход кишками наружу, типа тут у явном виде пишется то, что в норм фп было бы спрятано глубоко в сахар, так же как в пистоне например у методов явно первым аргументом идёт их зис, или прототайп говно в жс.
                            Ответить
        • Совершенно верно. На языке со структурной типизпизацией говнокода быть не может. Он может быть только для всякой параше типа жабы
          Ответить
  • даже крестошаблоны меркнут
    type Getters<Type> = {
        [Property in keyof Type as `get${Capitalize<string & Property>}`]: () => Type[Property]
    };
    
    interface Person {
        name: string;
        age: number;
        location: string;
    }
    
    type LazyPerson = Getters<Person>;
    //   ^ = type LazyPerson = {
    //       getName: () => string;
    //       getAge: () => number;
    //       getLocation: () => string;
    //   }
    Ответить
    • Если нужна типодрочка, советую Haskell, Standard ML, Ocaml и прочую такую питулю. Тупоскрип это костылёк для вротэнд питузов чтоб жабаскрипы заменить
      Ответить
        • Потому что в JS нет типизации, а TS добавляет типизацию, компилируясь в JS. Ну это как если б я написал препроцессор для сишки, который добавляет лямбды, классы и шаблоны, это тоже такой же костылек был бы
          Ответить
            • C-- это не Си, это какая-то внутренняя хуень, которая только в GHC и встречается. Это как если б Clang считать костыльком над LLVM
              Ответить
              • раньше ghc компилировал с-- в c. Получается, он до этого момента был костыльком а как прикрутили компиляцию в байт-код llvm магически перестал им быть?
                Ответить
          • В машинных кодах процессора тоже нет понятия "класс", а в С++ -- есть.

            Значит ли это, что C++ язык ненастоящий?
            Ответить
  • > status: 'lamer' | 'junior' | 'govnokoder';
    Отвратительня. Снячала джаваскриптеры использовали строки в качестве enum'ов (ня в последнюю очередь потому, что стандартных и удобных enum'ов ня было), а теперь эту говнопрактику узаконили аж в типизации.
    Ответить
    • Вообще это tagged union и как по мне заебись (и собственно enum добавляли во всякие яжи чисто для имитации этих ragged union). Ну то есть здесь всё-таки стоило вынести в классический enum, но когда ты можешь указать

      readonly status: KnownStatus | string


      И сразу дать конечным пользователям передавать _любую_ петушню для их нужд, просто игнорировать её в своей библиотеке - это збс. Хоть через десять лет для эдж-кейса эту библиотеку пользуй - она все равно костылей не потребует.
      Ответить
    • гост, ты чего? Это же юнион из literal types. Всё статически проверяется
      Ответить

Добавить комментарий

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8