• Как читать дженерики в TypeScript?

    Aetae
    @Aetae Куратор тега TypeScript
    Тлен
    Всё правильно. Квадратные скобки чтоб обозначить, что args - массив, в случае с any их можно выкинуть.
    Ответ написан
    2 комментария
  • Как читать дженерики в TypeScript?

    bingo347
    @bingo347 Куратор тега TypeScript
    Crazy on performance...
    Данная функция принимает аргумент constructor любого типа T, который является подтипом типа { new (...args: any[]): {} }

    В свою очередь { new (...args: any[]): {} } - это абсолютно тоже самое, что и new (...args: any[]) => {}. Это сигнатура конструктора, с любым количеством любых элементов и инстанциирующий значение с типом {}.

    Ну и тип {} - это множество всех не нулевых значений (не только объектов), то есть по сути это как тип any, но без null | undefined и с не сломанной вариантностью. Здесь его безболезненно можно заменить на тип unknown, в отличии от тех же аргументов, где из-за контрвариантности аргументов функций (и конструкторов) предикаты на типах ломаются и без any нормально не сделать.

    В целом, под такой дженерик подойдет абсолютно любой конструктор
    Ответ написан
    2 комментария
  • Почему не срабатывает код из короткого видеоурока?

    Во-первых, в HTML у вас много глупых ошибок: тег начинается с , а заканчивается . Тоже самое и для и
    Этот HTML должен выглядеть так:
    <!DOCTYPE html>
    <head>
      <link rel="stylesheet" href="style.css">
    </head>
    <body>
      <div class="wrapper">
        <header class="header">Header</header>
        <main class="main">Main</main>
        <footer class="footer">Footer</footer>
      </div>
    </body>
    </html>


    Во-вторых, добавьте в CSS к селектору body ещё и селектор html как в коде ниже.
    html, body {
      height: 100%;
      margin: 0;
      font-family: Helvetica;
      font-size: 25px;
    }
    
    .wrapper {
      min-height: 100%; 
      display: flex;
      flex-direction: column;
    }
    
    .header {
      background-color: lightsalmon;
      text-align: center;
      padding: 30px;
    }
    
    .main {
      text-align: center;
      padding: 30px;
      flex: 1 1 auto;
    }
    
    .footer {
      background-color: lightseagreen;
      text-align: center;
      padding: 30px;
    }


    Тогда всё заработает.
    Для полного счастья вот вам ссылка на выполненный код - https://codepen.io/Comrues/pen/GRmYqjV

    Не забудьте сделать этот пост ответом.
    Ответ написан
    5 комментариев
  • Как изменить Class.prototype в JS6?

    MvcBox
    @MvcBox
    Software Engineer [C/C++/JS(for Node.js)/etc]
    Потому, что:
    function Rabbit() {}
    console.log(Object.getOwnPropertyDescriptor(Rabbit, 'prototype'));  // { value: {}, writable: true, enumerable: false, configurable: false }

    class Rabbit {}
    console.log(Object.getOwnPropertyDescriptor(Rabbit, 'prototype')); // { value: {}, writable: false, enumerable: false, configurable: false }

    Найдите разницу :)

    А если бы использовали
    'use strict';
    то сразу бы увидели в чем проблема, так как при попытке выполнить
    Rabbit.prototype = {};
    получили бы ошибку:
    TypeError: Cannot assign to read only property 'prototype' of function 'class Rabbit {}'
    Ответ написан
    1 комментарий