1: 2016-03-08 (火) 14:16:58 njf[4] [5] [6] | 現: 2016-03-08 (火) 22:33:16 njf[4] [7] [8] | ||
---|---|---|---|
Line 11: | Line 11: | ||
console.log(labelledObj.label); | console.log(labelledObj.label); | ||
} | } | ||
+ | |||
var myObj = {size: 10, label: "Size 10 Object"}; | var myObj = {size: 10, label: "Size 10 Object"}; | ||
printLabel(myObj); | printLabel(myObj); | ||
Line 23: | Line 23: | ||
label: string; | label: string; | ||
} | } | ||
+ | |||
すると次からこれを使って型を指定できる。 | すると次からこれを使って型を指定できる。 | ||
Line 46: | Line 46: | ||
} | } | ||
- | この場合、要素の存在を保証するという利点は失われるが、かわりにエディタの補完がきくのと、変換時にエラーが出るのでタイプミスのチェックが可能という利点は残る。 | + | この場合、要素の存在を保証するという利点は失われるが、エディタの補完がきくのと、タイプミスのチェックが可能という利点は残る。 |
*関数型 [#s190ccc2] | *関数型 [#s190ccc2] | ||
Line 57: | Line 57: | ||
} | } | ||
- | これで2つのstring型の引数を持ち、戻り値がbooleanのInterfaceが定義できる。使うときには以下のようにする。 | + | これで2つのstring型の引数を持ち、戻り値がbooleanの関数のInterfaceが定義できる。使うときには以下のようにする。 |
var myFunc:MyFunction = function(arg1:string,arg2:string):boolean{ | var myFunc:MyFunction = function(arg1:string,arg2:string):boolean{ | ||
Line 63: | Line 63: | ||
} | } | ||
- | もちろん、Interfaceで指定した引数と戻り値を持たない関数を入れようとするとエラーとなる。 | + | もちろん、Interfaceで指定した引数と戻り値を持たない関数を入れようとするとエラーとなる。引数名は何でもかまわない。 |
*配列型 [#xb366d95] | *配列型 [#xb366d95] | ||
Line 79: | Line 79: | ||
length: number;//stringじゃないのでエラー | length: number;//stringじゃないのでエラー | ||
} | } | ||
+ | |||
+ | interface Dictionary { | ||
+ | [index: string]: string; | ||
+ | length: string;//stringなのでOK | ||
+ | } | ||
+ | |||
+ | 「[]」でアクセスしたときに矛盾するからと思われる。 | ||
*クラス型 [#l97b7524] | *クラス型 [#l97b7524] | ||
Line 87: | Line 94: | ||
setTime(d: Date); | setTime(d: Date); | ||
} | } | ||
+ | |||
class Clock implements ClockInterface { | class Clock implements ClockInterface { | ||
currentTime: Date; | currentTime: Date; | ||
Line 102: | Line 109: | ||
new (hour: number, minute: number); | new (hour: number, minute: number); | ||
} | } | ||
+ | |||
class Clock implements ClockInterface { | class Clock implements ClockInterface { | ||
currentTime: Date; | currentTime: Date; | ||
Line 113: | Line 120: | ||
new (hour: number, minute: number); | new (hour: number, minute: number); | ||
} | } | ||
+ | |||
class Clock { | class Clock { | ||
currentTime: Date; | currentTime: Date; | ||
constructor(h: number, m: number) { } | constructor(h: number, m: number) { } | ||
} | } | ||
+ | |||
var cs: ClockStatic = Clock; | var cs: ClockStatic = Clock; | ||
var newClock = new cs(7, 30); | var newClock = new cs(7, 30); | ||
- | こちらはOK。コンストラクタはstaticに属するが、newでチェックするのはインスタンスに属するものなのでエラーが出るらしい。 | + | こちらはOK。コンストラクタはstaticに属するが、newでチェックするのはインスタンスに属するものなのでエラーが出るらしい。わからないときはJavaScriptのコンストラクタの仕組みを思い出すか、そういう物だと思っておけばよい。 |
*Interfaceの継承 [#ee044493] | *Interfaceの継承 [#ee044493] | ||
Line 131: | Line 138: | ||
color: string; | color: string; | ||
} | } | ||
+ | |||
interface PenStroke { | interface PenStroke { | ||
penWidth: number; | penWidth: number; | ||
} | } | ||
+ | |||
interface Square extends Shape, PenStroke { | interface Square extends Shape, PenStroke { | ||
sideLength: number; | sideLength: number; | ||
} | } | ||
+ | |||
var square = <Square>{}; | var square = <Square>{}; | ||
square.color = "blue"; | square.color = "blue"; | ||
Line 154: | Line 161: | ||
reset(): void; | reset(): void; | ||
} | } | ||
+ | |||
var c: Counter; | var c: Counter; | ||
c(10);//関数型として | c(10);//関数型として | ||
c.reset();//クラス型としてメソッド呼び出し | c.reset();//クラス型としてメソッド呼び出し | ||
c.interval = 5.0;//プロパティ | c.interval = 5.0;//プロパティ | ||
+ | |||
+ | クラスで良いし、理解しづらいのであまり使われなさそうな気がするが実際どうかは知らない。 |
(This host) = https://njf.jp