networkua - 2012 - introduction typescript

23
TypeScript Дмитрий Миндра LOHIKA, Одесса ВВЕДЕНИЕ В

Upload: dmytro-mindra

Post on 29-Nov-2014

881 views

Category:

Technology


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: NetworkUA - 2012 - Introduction TypeScript

TypeScriptДмитрий МиндраLOHIKA, Одесса

ВВЕДЕНИЕ В

Page 2: NetworkUA - 2012 - Introduction TypeScript
Page 3: NetworkUA - 2012 - Introduction TypeScript

Geek and Poke

http://geekandpoke.typepad.com/

Page 4: NetworkUA - 2012 - Introduction TypeScript

Зачем ?

Для построения масштабируемых и

поддерживаемых систем

Для облегчения поддержки кода

TypeScript – «опционально» типизированный язык

Полностью совместим с JavaScript и является его

надмножеством.

Компилируется в JavaScript

OpenSource

Page 5: NetworkUA - 2012 - Introduction TypeScript

С чего начать ?

Plugin is available

npm install –g typescript

tsc source.ts

Node.js

Visual Studio 2012

Page 6: NetworkUA - 2012 - Introduction TypeScript

Расширения файлов

*.ts – исходный код TypeScript• *.d.ts – TypeScript definition files

Page 7: NetworkUA - 2012 - Introduction TypeScript

Декларации

• TypeScript всего лишь описывает контракты динамических типов, облегчая разработку.

• Файлы с декларайиями позволяют описать типы как заголовочные файлы в C++

• Intellisense будет корректно давать подсказки

• Файлы для DOM и jQuery идут в поставке с TypeScript (lib.d.ts).

• Сообщество активно пишет декларации для стандартных библиотек.

Page 8: NetworkUA - 2012 - Introduction TypeScript

Инструментальная поддержка

• Статическая проверка типов• Навигация по символам• Intellisense• Рефакторинг

Page 9: NetworkUA - 2012 - Introduction TypeScript

Аннотации типов

• Тип возвращаемого значения будет выведен.

• Постфиксная запись :number• Есть опциональные

параметры ?:number

function multiply(a: number, b: number) { return a * b; }

Page 10: NetworkUA - 2012 - Introduction TypeScript

Типы

Классы, модули, интерфейсы Типизированные массивы

number bool String null undefined

var employees : Employee[] = [];

Тип Any является общим предком для всех типов и может хранить любой тип JavaScript без каких-либо ограничений.

Простые типы:

Объекты:

Page 11: NetworkUA - 2012 - Introduction TypeScript

Лямбды

() => { console.log(“It’s Saturday!”)}setTimeout(() => { alert(this.message); }, 3000);

(x) => { return Math.sin(x); }(x) => Math.sin(x)x => { return Math.sin(x); }x => Math.sin(x)

Page 12: NetworkUA - 2012 - Introduction TypeScript

Type Assertions

• Не является приведением типов, и не проверяется во время выполнения.

function createShape(kind: string): Shapevar circle = <Circle> createShape("circle");

Page 13: NetworkUA - 2012 - Introduction TypeScript

Интерфейсы

Интерфейсы могут расширять друг друга

Для интерфейсов не генерируется JavaScript

interface Mover{ move(): void; getStatus(): { speed: number; };}

interface Shaker{ shake(): void; getStatus(): { speed: number; };}

interface MoverShaker extends Mover, Shaker{ getStatus(): { speed: number; frequency: number; };}

Page 14: NetworkUA - 2012 - Introduction TypeScript

Интерфейс

А это будет функция, принимающая два строковых параметра и возвращающая числовое значение.

interface StringComparer { (a: string, b: string): number; }

Page 15: NetworkUA - 2012 - Introduction TypeScript

Ambient Declarations

Мы вводим переменную в TypeScript, хотя она объявлена где-то в другом месте.

Код для таких объявлений не генерируется.

declare var document:Document;

Page 16: NetworkUA - 2012 - Introduction TypeScript

Классы

class Lottery { constructor (private secret: number) { }

public gamble(guess: number) { if (guess == this.secret) console.log('win'); else console.log('loose') }

private showSecret() { console.log('secret'); }}

var Lottery = (function () { function Lottery(secret) { this.secret = secret; } Lottery.prototype.gamble = function (guess) { if(guess == this.secret) { console.log('win'); } else { console.log('loose'); } }; Lottery.prototype.showSecret = function () { console.log('secret'); }; return Lottery;})();

Page 17: NetworkUA - 2012 - Introduction TypeScript

Классы

• Есть public и private модификаторы.

• Объявление и инициализация полей через параметры конструктора.

• Обращение к родительскому классу через super

Page 18: NetworkUA - 2012 - Introduction TypeScript

Модулиmodule M { var s = "hello"; export function f() { return s; }}M.f();M.s; // Error, s is not exported

Page 19: NetworkUA - 2012 - Introduction TypeScript

Зависимости

/// <reference path="Common.ts" />

import mod = module("saturday");var modspeaker = new mod.Speaker();

Reference comment

Import declaration

Page 20: NetworkUA - 2012 - Introduction TypeScript

Source Map

В отладчике виден TypeScript вместо скомпилированного JavaScript.Работает в Google ChromeПока что не интегрировано в Visual Studio

tsc -sourcemap file.ts

Page 21: NetworkUA - 2012 - Introduction TypeScript

Преимущества TypeScript

Строгая типизацияМасштабируемость

Page 22: NetworkUA - 2012 - Introduction TypeScript

Недостатки TypeScript

Состояние PreviewНеобходимость компиляцииНе полная совместимость с JavaScriptВозможное разветвление с ECMAScript

Page 23: NetworkUA - 2012 - Introduction TypeScript

Спасибо !https://github.com/DmytroMindra/NetworkUA-2012-TypeScriptGame

Great presentation by Ben Smith http://10consulting.com/2012/10/12/introduction-to-typescript-presentation/

Documentationhttp://www.typescriptlang.org/Content/TypeScript%20Language%20Specification.pdf

Official Websitehttp://www.typescriptlang.org

Anders Hejlsberg: Introducing TypeScript