-
Notifications
You must be signed in to change notification settings - Fork 10
0.9メモ
kontan edited this page Apr 21, 2013
·
11 revisions
オブジェクト型リテラルでもちゃんと型パラメータを持てる。
var id: { <T>(t: T):T; };
オーバーロードするときは注意。
function hoge<T>(x: number): T; ← このTと
function hoge<T>(x: string): T; ← この T は別物。
function hoge<T>(x: any): T { ← この T とも別物なので、本体ではここは any にしておく必要がある。
return null;
}
class Hoge<T>{
}
var hoge: Hoge<void>; // え?
var piyo: Hoge<undefined>;
// var puyo: Hoge<null>; // これはダメ
省略可能な引数でかつデフォルト値のある引数は、?
をつけないことになった
静的メソッドでうまくいかない
class Hoge{
static hoge<S>(s: S){
}
}
静的メソッドで型パラメータを引数や返り値で使うとエラーになる。 型パラメータの定義だけなら問題はないので、バグっぽい。
class A{
f<T>(t: T){
}
}
class B extends A{
f<T>(t: T){
}
}
この場合、 T はクラスをまたいでいるので、A.f の T と B.f の T は別物だと見なされてしまうらしい。 そのため T に互換性がないといわれてしまう。 バグっぽく見えるが、仕様なのかも。
バグっぽい。単一の型パラメータだと大丈夫
interface C<T>{
}
function f<S,T>(s:C<S>, t:C<T>): void{
}
var a: C<string>;
f(a, a); // NG
f<string,string>(a, a); // OK