Статьи

Microsoft TypeScript: краткое введение и любовная интрига

Хорошо, я знал, что это будет. По крайней мере, я сделал вывод. Когда я несколько месяцев назад отправился в Microsoft, чтобы принять участие в саммите MVP, у нас была потрясающая сессия от Андерса, и я спросил его, каково будущее C #. Он пробормотал что-то вроде «JavaScript — это настоящий кроссплатформенный язык» (я правильно это слышал?)

образИ было предположение, что Андерс работает над чем-то связанным с JavaScript. И вот, Typescript здесь. TypeScript — это аккуратный маленький язык, который компилируется в JavaScript, и скомпилированный вывод кажется читаемым и довольно печатным, так что вы можете использовать скомпилированный JavaScript напрямую где угодно. Я играл с Typescript, и он выглядит довольно аккуратно (да, я повторяю термин «аккуратно»). Синтаксис имеет магическое сходство с эстетикой C # (или это было моё чувство?). Я видел, как мало кто задавался вопросом, является ли TypeScript версией Microsoft от Dart или это какой-то сценарий Coffee Script на стероидах, но после того, как я попробовал TypeScript некоторое время, я влюбился в Typescript. Я делал некоторые заметки и объединил их для этой записи в блоге.

Вы можете установить Typescript отсюда , а затем в Visual Studio попробуйте создать приложение HTML с Typescript. (Поклонники OSS, поднимите настроение, также доступна поддержка VI, Sublime и Emacs )

образ

Быстрый Hello World в TypeScript

Вот краткий привет сценарий мира, который я написал, используя Typescript. Вы можете увидеть файл сценария типа (app.ts) и сгенерированный файл app.js. Как я уже говорил, синтаксис очень похож на C #. И большой сюрприз — как видно из названия, Type Script поддерживает «Типы». Смотрите мой класс HelloWorld ниже, у меня есть конструктор, который принимает HTMLElement, и у меня есть метод sayHello, который принимает сообщение типа string. Я чувствую, что эти контракты типов будут большим благом, потому что это поможет программистам определить ожидаемые типы для функции.

образ

 

Вот код Typescript и сгенерированный код Javascript. Работая в Visual Studio, я заметил, что редактор Typescript в Visual Studio обеспечивает вывод типов, это круто. Смотрите мой класс HelloWorld — довольно понятно.

//Our TypeScript HelloWorld class

class HelloWorld {
    
    //A variable of type HTMLElement
    element: HTMLElement;

    //A Consctructor that accepts an element
    constructor (e: HTMLElement) { 
        this.element = e;
    }

    //A public method
    sayHello(message: string) {
        this.element.innerHTML = message;
    }

}

window.onload = () => {
    var e = document.getElementById('content');

    //Initiate HelloWorld Class
    var hello = new HelloWorld(e);
    hello.sayHello("Hello World");
};

Потрясающие. Теперь вот сгенерированный код Javascript, который эквивалентен приведенному выше коду Typescript. Аккуратное и чистое поколение.  

var HelloWorld = (function () {
    function HelloWorld(e) {
        this.element = e;
    }
    HelloWorld.prototype.sayHello = function (message) {
        this.element.innerHTML = message;
    };
    return HelloWorld;
})();
window.onload = function () {
    var e = document.getElementById('content');
    var hello = new HelloWorld(e);
    hello.sayHello("Hello World");
};

Вы даже можете использовать ключевые слова области видимости в своем классе TypeScript — попробуйте сделать переменную элемента приватной , а метод sayHello общедоступным . Я также просмотрел спецификацию Type Script, и вот несколько других интересных моментов, которые я заметил, кроме поддержки типов. 

Типы функций

Typescript использует типы функций для обработки обратных вызовов. Давайте изменим код выше, чтобы перезвонить. Обратите внимание, что я добавил параметр notify в наш метод типа sayHello

(обратная связь: строка) => любая

Это просто представляет функцию, которая принимает входной параметр типа string и возвращает «any» обратно вызывающей стороне (см. «Any» type ниже). После завершения sayHello мы перезваниваем notify (..), который вызовет функцию (..), которую мы передали sayHello из window.onload — это почти как передача функции через тип делегата и его обратный вызов в смысле C # …

//Our TypeScript class now with Callbacks

class HelloWorld {
    
    //A variable of type HTMLElement
    element: HTMLElement;

    //A Consctructor that accepts an element
    constructor (e: HTMLElement) { 
        this.element = e;
    }

    //A public method. See notify paramter is now taking a Function Type
    sayHello(message: string, notify: (feedback : string)=>any ) {
        alert(message);
        //Do some other complex stuff here
        notify("completed sayHello");
    }

}

window.onload = () => {
    var e = document.getElementById('content');

    //Initiate HelloWorld Class
    var hello = new HelloWorld(e);
    hello.sayHello("Hello World", function (feedback) {
            alert(feedback);
        }
    );
};

Запустите проект, запустите HTML-страницу, и вы увидите первое окно с сообщением «hello world» и второе окно с сообщением «complete sayHello». Довольно круто. Мы только что узнали, как писать безопасные обратные вызовы типов в TypeScript, элегантно, не беспокоясь о замыканиях

Типы объектов

Тип объекта выглядит как {параметр1: тип1, параметр2: тип2,…}. Пример

{name: string, age: number}

Вы можете дать имя типу объекта, например так.

 interface Human 
   {
    name: string, 
    age: number
   }

Определив интерфейс, вы можете использовать его в качестве контракта, для указания ввода, для типов возврата, для обратных вызовов и т. Д., С полной поддержкой Intellisense. См. ниже.

образ 

Еще немного о типах в Typescript

TypeScript имеет несколько типов. Вот краткий обзор

‘любой тип

«Любой тип — это супер набор всех типов»

  • Пример:

    • var x: любой; // x явно указан для любого
    • var y; // тип y по умолчанию любой, так как другой тип не указан

Примитивные типы

TypeScript поддерживает число, bool, string, null и undefined

  • пример

    • номер

      • var num: число;
      • var num = 20; // номер типа будет автоматически выведен для переменной num, так же как и var num: number = 20
    • строка

      • имя переменной: строка;
      • var message = «привет»; // тип строки будет автоматически выведен для переменной сообщения
    • Bool

      • var isOpen: bool;
      • var isEnabled = true; // тип bool будет автоматически выведен для переменной isEnabled

тип ‘void’

Используется в качестве возвращаемого типа функций, которые не возвращают никакого значения

Типы объектов

Это включает в себя класс, интерфейс, модуль и литеральные типы. Эти типы объектов содержат один или несколько

  • свойства
  • Сигнатуры вызовов (параметры и типы возврата, связанные с операцией вызова)
  • Создайте подписи (параметры и типы возврата, связанные с применением оператора ‘new’)
  • Подписи индекса
  • Бренды (Бренды — это категории, к которым принадлежит данный тип объекта)
  •  
    • Подробнее об этом позже. Примеры

      • Объект obj = {имя: «Винод», возраст: 30};
      • Квадрат функции = (x: число) => x * x; // Почти как лямбда-синтаксис в C #

Вывод

В целом, я обнаружил, что есть странный фактор притяжения, который связывает разработчиков C # с Type Script. Я смог начать без особых хлопот, и смог понять основы за пару часов. Конечно, введение типов (CLARIFIED: т. Е. Типов для включения четко определенных контрактов для функций, входных параметров, типов возврата и т. Д.) На метауровне и при этом поддержание динамической функции JavaScript — это большая вещь, поскольку это означает лучший рефакторинг, более простое сопровождение и лучшая документация. Наслаждайтесь TypeScript, я уверен, что скоро напишу больше об этом. Я влюблен в Typescript.