Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Head First TypeScript

Head First TypeScript

TypeScriptの簡単な紹介です

KAZUMA Ukyo

March 29, 2013
Tweet

More Decks by KAZUMA Ukyo

Other Decks in Programming

Transcript

  1. TypeScript var f = function(a, b) { return a +

    b; } '10' + f(1, 2); // ‘103’ w o w
  2. TypeScript var f = function(a : number, b : number)

    { return a + b; } f(‘1’, 2); // Compile error :)
  3. TypeScript var f = function(a : number , b :

    number) { return a + b; } '10' + f(1, 2); // ‘103’ d(^o^)b
  4. TypeScript var f = function(a : number , b :

    number) : number { return a + b; } var a : number = '10'; // Compile error :) a + f(1, 2);
  5. JavaScript function Programmer(name, language) { this.name = name || 'JavaScripter';

    this.language = language || 'JavaScript' } var P = Programmer; P.prototype.deathMarching = function() { return this.language === 'JavaScript'; }
  6. 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
  7. 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
  8. 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
  9. 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' } }
  10. 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
  11. 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
  12. 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
  13. 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 !
  14. JavaScript var Job = {}; (function(){ var Programmer = function()

    { //... } Job.Programmer = Programmer; var Director = function() { //... } Job.Director = Director; var Manager = function() { //... } Job.Manager = Manager; })(Job);
  15. TypeScript module Job{ ! export class Programmer { ! !

    //... ! } ! ! export class Director { ! ! //... ! } ! ! export class Manager { ! ! //... ! } }
  16. 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 !
  17. !== Java / C# Programmers can give names to object

    types; TypeScript Language Specification
  18. TypeScript interface Programmer { name : string; language : string;

    canDeathMarch : () => bool; } var programmer : Programmer = { name : ‘TypeScripter’, language : ‘TypeScript’, canDeathMarch : function() { return false; } }
  19. 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
  20. 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' } }); });