1. JavaScript / Говнокод #27350

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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, 11 Апреля 2021

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

    • SEO: Почему у нас нет тайпскрипта?
      Ответить
      • По той же причине, по которой отдельно нет препроцессора сишки.
        Ответить
        • не понимаю, чем сишка отличается от 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++. Устроили какой-то сосиализм, блин.
              Ответить
          • Вообще, фронтэнд-питузы кучу всякой хуиты понавысирали https://jster.net/blog/js-alternatives-coffeescript-dart-typescript - давайте всю такую хуйню добавлять
            Ответить
            • дартом и кофе никто почти не пользуется, а TS сейчас дефакто практически для фронтэндщины.

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

              ну собссно в этом коде видн
              Ответить
              • >паттерн матчинг
                А ну
                Ответить
                • https://github.com/gvergnaud/ts-pattern
                  Ответить
                  • Выглядит рагульно но в общем неплохо, спасибо
                    Ответить
                    • а разве на строке 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. Ну это как если б я написал препроцессор для сишки, который добавляет лямбды, классы и шаблоны, это тоже такой же костылек был бы
            Ответить
            • >Ну это как если б я написал препроцессор для сишки

              https://en.wikipedia.org/wiki/Glasgow_Haskell_Compiler
              >The back end of the compiler transforms Core code into an internal representation of C--...
              какой костылек )))
              Ответить
              • 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. Всё статически проверяется
        Ответить

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