Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Head First TypeScript
Search
KAZUMA Ukyo
March 29, 2013
Programming
2
2.4k
Head First TypeScript
TypeScriptの簡単な紹介です
KAZUMA Ukyo
March 29, 2013
Tweet
Share
More Decks by KAZUMA Ukyo
See All by KAZUMA Ukyo
JavaScript+DDD実践編?
yaakaito
8
35k
Functional JavaScript/TypeScript
yaakaito
4
1.2k
モデリングをはじめよう
yaakaito
3
370
JavaScript TDD Bootcamp
yaakaito
0
150
"Buster.JS" ClinetSide Javascript testing
yaakaito
4
1.1k
Other Decks in Programming
See All in Programming
FigmaとPHPで作る1ミリたりとも表示崩れしない最強の帳票印刷ソリューション
ttskch
42
18k
Ruby GitHub Packages
bkuhlmann
0
630
SwiftUI Performance 不要なViewの再描画と更新を抑える
bigamitiongit
1
160
HUIT新歓2024「競技プログラミング、やってみませんか?」
slephy2784
1
260
What We Can Learn From OSS
inouehi
0
420
スクラムガイドのスプリントレトロスペクティブを改めて読みかえしてみた / Re-reading the Sprint Retrospective Section in the Scrum Guide
mackey0225
3
390
新宿ダンジョンを可視化してみた
satoshi7190
2
140
Java 22 Overview
kishida
1
180
TYPO3 v13 – The road to LTS: What's new and new APIs
luisasofie_xoxo
0
190
⼤規模⾔語モデルの拡張(RAG)が 終わったかも知れない件について
nearme_tech
22
15k
単体テストを書かない技術 #phpcon_odawara
o0h
PRO
26
8.1k
ゆるい個人開発のススメ
kuroppe1819
10
970
Featured
See All Featured
A designer walks into a library…
pauljervisheath
199
23k
Faster Mobile Websites
deanohume
297
30k
ParisWeb 2013: Learning to Love: Crash Course in Emotional UX Design
dotmariusz
104
6.6k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
1
1.3k
Building Effective Engineering Teams - LeadDev
addyosmani
27
1.8k
Making Projects Easy
brettharned
108
5.5k
How STYLIGHT went responsive
nonsquared
92
4.8k
The Brand Is Dead. Long Live the Brand.
mthomps
48
28k
The Invisible Side of Design
smashingmag
294
49k
Producing Creativity
orderedlist
PRO
336
39k
GitHub's CSS Performance
jonrohan
1023
450k
Building an army of robots
kneath
300
41k
Transcript
Head Firtst TypeScript { } KAZUMA Ukyo / @yaakaito
None
JavaScript
JavaScripter <3 JavaScript
JavaScripter <3 JavaScript C#
TypeScript?
JavaScript var f = function(a, b) { return a +
b; }
TypeScript var f = function(a, b) { return a +
b; }
TypeScript var f = function(a, b) { return a +
b; } '10' + f(1, 2); // ‘103’ w o w
TypeScript is Superset
TypeScript var f = function(a : number, b : number)
{ return a + b; } f(‘1’, 2); // Compile error :)
but...
TypeScript var f = function(a : number , b :
number) { return a + b; } '10' + f(1, 2); // ‘103’ d(^o^)b
TypeScript var f = function(a : number , b :
number) : number { return a + b; } var a : number = '10'; // Compile error :) a + f(1, 2);
TypeScript
TypeScript
Class
JavaScript function Programmer(name, language) { this.name = name || 'JavaScripter';
this.language = language || 'JavaScript' } var P = Programmer; P.prototype.deathMarching = function() { return this.language === 'JavaScript'; }
JavaScript function Programmer(name, language) { this.name = name || 'JavaScripter';
this.language = language || 'JavaScript' } var P = Programmer; P.prototype.deathMarching = function() { return this.language === 'JavaScript'; } } properties
JavaScript function Programmer(name, language) { this.name = name || 'JavaScripter';
this.language = language || 'JavaScript' } var P = Programmer; P.prototype.deathMarching = function() { return this.language === 'JavaScript'; } } construcor
JavaScript function Programmer(name, language) { this.name = name || 'JavaScripter';
this.language = language || 'JavaScript' } var P = Programmer; P.prototype.deathMarching = function() { return this.language === 'JavaScript'; } } methods
TypeScript class Programmer { name : string = 'TypeScripter'; language
: string = 'TypeScript'; constructor(name? : string, language? : string) { if (name) { this.name = name; } if (language) { this.language = language; } } isDeathMarching() : bool { return this.language === 'JavaScript' } }
TypeScript class Programmer { name : string = 'TypeScripter'; language
: string = 'TypeScript'; constructor(name? : string, language? : string) { if (name) { this.name = name; } if (language) { this.language = language; } } isDeathMarching() : bool { return this.language === 'JavaScript' } } } properties
TypeScript class Programmer { name : string = 'TypeScripter'; language
: string = 'TypeScript'; constructor(name? : string, language? : string) { if (name) { this.name = name; } if (language) { this.language = language; } } isDeathMarching() : bool { return this.language === 'JavaScript' } } } construcor
TypeScript class Programmer { name : string = 'TypeScripter'; language
: string = 'TypeScript'; constructor(name? : string, language? : string) { if (name) { this.name = name; } if (language) { this.language = language; } } isDeathMarching() : bool { return this.language === 'JavaScript' } } } methods
Compiled var Programmer = (function () { function Programmer(name, language)
{ this.name = 'TypeScripter'; this.language = 'TypeScript'; if(name) { this.name = name; } if(language) { this.language = language; } } Programmer.prototype.isDeathMarching = function () { return this.language === 'JavaScript'; }; return Programmer; })(); so cute !
Module
JavaScript var Job = {}; (function(){ var Programmer = function()
{ //... } Job.Programmer = Programmer; var Director = function() { //... } Job.Director = Director; var Manager = function() { //... } Job.Manager = Manager; })(Job);
TypeScript module Job{ ! export class Programmer { ! !
//... ! } ! ! export class Director { ! ! //... ! } ! ! export class Manager { ! ! //... ! } }
Compiled var Job; (function (Job) { var Programmer = (function
() { function Programmer() { } return Programmer; })(); Job.Programmer = Programmer; var Director = (function () { function Director() { } return Director; })(); Job.Director = Director; var Manager = (function () { function Manager() { } return Manager; })(); Job.Manager = Manager; })(Job || (Job = {})); so cute !
Interface
!== Java / C# Programmers can give names to object
types; TypeScript Language Specification
TypeScript interface Programmer { name : string; language : string;
canDeathMarch : () => bool; } var programmer : Programmer = { name : ‘TypeScripter’, language : ‘TypeScript’, canDeathMarch : function() { return false; } }
Compiled var programmer = { name: 'TypeScripter', language: 'TypeScript', canDeathMarch:
function () { return false; } };
TypeScript interface IDeathMarch { () : void; (programmer:Programmer) : void;
(days:number) : void; (spec:Spec) : void; } var deathMarch : IDeathMarch = function(arg) { if (arg instanceof Programmer){ /* ... */ } if (arg instanceof Spec){ /* ... */ } // ... } deathMarch();// :( deathMarch(new Programmer(‘TypeScripter’));// X( deathMarch(-5);// orz deathMarch(new Spec(‘New Solution’));// f*ck
and many more feature...
but...
JavaScript module( ‘Job’, function(export){ export.Programmer = class( ‘Programmer’, { name
: ‘TypeScripter’, language : ‘TypeScript’ constructor: function(name, language) if (name) { this.name = name; } if (language) { this.language = language; } }, isDeathMarching() { return this.language === 'JavaScript' } }); });
Cannot evade JavaScript traps.
Not solution
for JavaScripter