Нужен ли мне сейчас TypeScript?

TLDR; есть более полезные практики

Нужен ли мне
TypeScript?

Что будет

Что не будет

Что мы хотим?

Идеальный код

Идеальный код:

Что не так в JS?

Область видимости переменных var?


{
 let blockScopedVar = true;
 const letPlusRedefineForbiddenVar = true;
}
  

with(), eval()?

Не используйте evil-практики. JavaScript: The Good Parts

Class?

Композиция vs наследование

В JS нет классов.

- объекты расширяются в run-time

- для создания объекта достаточно литерала {}

ES 2015 +: Class сахар

Douglas Crockford Inheritance

Object.create(
    prototype
    [, properties]
    )
  

Douglas Crockford Inheritance: God Mode

Douglas Crockford: The Better Parts

Interfaces? Abstract Classes?

Не думаю.

Пример "кода":


    let foo = 'Alex';
    foo = 42;
    foo = (bar) => bar.zzz;
    foo = { pervii: 'Alex', ftoroy: 'Baumgertner' };

    foo();

    Uncaught TypeError: "foo" is not a function
  

Как исправить?

Показывать ошибки на этапе
трансшпилега. TypeScript


    let lol : string = 'Alex';
    let bar: number = 37;
    let baz : Person = {firstName: 'Alex'};
    let foo = (person: Foo) : string => person.firstName;

    class Foo {} или interface Person {}

    Compile time error: `foo` is not a function
  

Как исправить?

Выбор имен

Video: Как называть переменные: Григорий Петров

Перераспределение сложности:

Имя!

Отвечает на вопрос:

Что это?


    
    /** @type {String} */
    
    let name = 'Alex';
  

    
    /** @type {Number} */
    
    let age =  37;
  
    /**
     * @typedef {Object} Person
     * @property {String} firstName
     * @property {Function} feed
     */
    
    let presenter = {
      firstName: 'Alex',
      feed: (food) => 'yummy!'
    };
  

@use JSDoc

Что еще?

Что еще: Crockford — The Next Language

А что еще?
Functional programming!

И наконец

Материалы для чтения

Вопросы?

Спасибо!

alexbaumgertner

Fork me on GitHub