動的型付けから静的型付けへ
TypeScript Type System
•静的型付けシステムの導入
• JavaScript のあいまいさを排除
• 安全性・可読性・生産性の向上
• 型付けするか否かは自由
• 動的型付けの利点も生かせる
• any 型: すべての型の基本
• プリミティブ (基本) 型
• number, string, boolean,
null, undefined, enum
• オブジェクト型
• class, module, interface
• void 型: 戻り値なしの関数で使用
interface I { }
class C { }
module M { }
{ s: string; }
number[]
() => boolean
20.
静的型付け記述例 (プリミティブ型)
TypeScript TypeSystem Example
// Any
var x: any; // 明示的
var y; // y: any と同じ
var z: { a; b; }; // z: { a: any; b: any; } と同じ
function f(x) { // f(x: any): void と同じ
console.log(x);
}
// Number
var x: number; // 明示的
var y = 0; // y: number と同じ
var z = 123.456; // z: number = 123.456 と同じ
// Boolean
var b: boolean; // 明示的
var yes = true; // yes: boolean = true と同じ
var no = false; // no: boolean = false と同じ
// String
var s: string; // 明示的
var empty = “”; // empty: string = “” と同じ
var abc = ‘abc’; // abc: string = “abc” と同じ
// Null
var n: number = null; // 基本型は Null 設定可
var x = null; // x: any = null と同じ
// Undefined
var n: number; // n: number = undefined と同じ
var x = undefined; // x: any = undefined と同じ
// Enum
enum Color { Red, Green, Blue }
var myColor = Color.Red;
Console.log(Color[myColor]); // Red
Interface, Class, Module記述例
TypeScript Interface, Classes and Modules Example
// Interface
interface Mover {
move(): void;
getStatus(): { speed: number; };
}
interface Shaker {
shake(): void;
getStatus(): { frequency: number; };
}
interface MoverShaker extends Mover, Shaker {
getStatus(): { speed: number;
frequency: number; };
}
interface Person {
FullName: string;
Age: number;
}
function greeter(person: Person) {
}
// Module (Internal)
module Sayings {
export class Greeter {
...
}
}
var greeter = new Sayings.Greeter("world");
// Class
class Greeter {
greeting: string;
constructor (message: string) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
}
var greeter = new Greeter(“world”);
greeter.greet();
24.
ジェネリクス の利用
Generics :Parameterized Types
• ジェネリクスの導入 (v.0.9)
• パラメータ化した型の利用
• Java, C#, C++ などの静的型付け言語では一般的
class Human<T> {
constructor(public name: T) { }
Talk(): T {
return this.name;
}
}
var me = new Human<string>("Taro Yamada");
alert(me.Talk());
interface A { a: string; }
interface B extends A { b: string; }
interface C extends B { c: string; }
interface G<T, U extends B> { x: T; y: U; }
var v1: G<A, C>; // Ok
var v2: G<{ a: string }, C>; // Ok
var v3: G<A, A>; // Error
var v4: G<G<A, B>, C>; // Ok
var v5: G<any, any>; // Ok
var v6: G<any>; // Error
var v7: G; // Error
TypeScript ロードマップ
Compiler andLanguage Improvements
• 0.9.0
• Generics
• Overload on constants
• "export ="
• Improve compiler performance
• Improvements to type system to help model a larger variety of JS libraries
• 0.9.1
• 'typeof' support in type expression
• Project integration support in VS plugin
• 1.0
• Stabilization
• 1.x
• Async/Await, Mixins, Protected access
• ES6-compatible codegen