Upload
dmytro-mindra
View
874
Download
0
Tags:
Embed Size (px)
DESCRIPTION
Citation preview
TypeScriptДмитрий МиндраLOHIKA, Одесса
ВВЕДЕНИЕ В
Geek and Poke
http://geekandpoke.typepad.com/
Зачем ?
Для построения масштабируемых и
поддерживаемых систем
Для облегчения поддержки кода
TypeScript – «опционально» типизированный язык
Полностью совместим с JavaScript и является его
надмножеством.
Компилируется в JavaScript
OpenSource
С чего начать ?
Plugin is available
npm install –g typescript
tsc source.ts
Node.js
Visual Studio 2012
Расширения файлов
*.ts – исходный код TypeScript• *.d.ts – TypeScript definition files
Декларации
• TypeScript всего лишь описывает контракты динамических типов, облегчая разработку.
• Файлы с декларайиями позволяют описать типы как заголовочные файлы в C++
• Intellisense будет корректно давать подсказки
• Файлы для DOM и jQuery идут в поставке с TypeScript (lib.d.ts).
• Сообщество активно пишет декларации для стандартных библиотек.
Инструментальная поддержка
• Статическая проверка типов• Навигация по символам• Intellisense• Рефакторинг
Аннотации типов
• Тип возвращаемого значения будет выведен.
• Постфиксная запись :number• Есть опциональные
параметры ?:number
function multiply(a: number, b: number) { return a * b; }
Типы
Классы, модули, интерфейсы Типизированные массивы
number bool String null undefined
var employees : Employee[] = [];
Тип Any является общим предком для всех типов и может хранить любой тип JavaScript без каких-либо ограничений.
Простые типы:
Объекты:
Лямбды
() => { 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)
Type Assertions
• Не является приведением типов, и не проверяется во время выполнения.
function createShape(kind: string): Shapevar circle = <Circle> createShape("circle");
Интерфейсы
Интерфейсы могут расширять друг друга
Для интерфейсов не генерируется 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; };}
Интерфейс
А это будет функция, принимающая два строковых параметра и возвращающая числовое значение.
interface StringComparer { (a: string, b: string): number; }
Ambient Declarations
Мы вводим переменную в TypeScript, хотя она объявлена где-то в другом месте.
Код для таких объявлений не генерируется.
declare var document:Document;
Классы
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;})();
Классы
• Есть public и private модификаторы.
• Объявление и инициализация полей через параметры конструктора.
• Обращение к родительскому классу через super
Модулиmodule M { var s = "hello"; export function f() { return s; }}M.f();M.s; // Error, s is not exported
Зависимости
/// <reference path="Common.ts" />
import mod = module("saturday");var modspeaker = new mod.Speaker();
Reference comment
Import declaration
Source Map
В отладчике виден TypeScript вместо скомпилированного JavaScript.Работает в Google ChromeПока что не интегрировано в Visual Studio
tsc -sourcemap file.ts
Преимущества TypeScript
Строгая типизацияМасштабируемость
Недостатки TypeScript
Состояние PreviewНеобходимость компиляцииНе полная совместимость с JavaScriptВозможное разветвление с ECMAScript
Спасибо !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