如果您阅读代码,您会发现类泛型并不安全。 (为了清楚起见,我并不是说你应该避免使用泛型,只是如果你在使用泛型的类中有不同的类型参数,你应该小心。我喜欢类型难题。)
Java 泛型和 TypeScript 泛型有不同的规范。
Java 泛型是不可变的。 TypeScript 中的类泛型是协变的。在接口方面,TypeScript 似乎知道各个字段是否可分配。当我可以添加代码时,我会这样做。
// ただのスーパークラス
class SuperClass {
public name : string = " super "
}
// サブクラスその1
class SubClass1 extends SuperClass {
public email = " bar " ;
}
// サブクラスその2
class SubClass2 extends SuperClass {
public address = " baz " ;
}
// ジェネリクスを使った配列のラッパークラスのようなもの
// 今回の主役
class List < T > {
public array : T [] = [];
public push ( item : T ) {
this . array . push ( item );
}
public get ( index : number ) {
return this . array [ index ];
}
}
// Listをインスタンス化
let sub1List = new List < SubClass1 > ();
let superList = new List < SuperClass > ();
// superListにsub1Listの参照を渡す(TypeScriptのジェネリクスは共変なので可能)
superList = sub1List ;
// SubClass2はSuperClassのサブクラスなので以下のコードはコンパイルエラーにならないが、、、
// 実際はsuperListはsub1Listを参照しているのでsub1ListにSubClass2のインスタンスが追加されている
superList . push ( new SubClass2 ());
// itemの方はSubClass1と判定されているが実際はSubClass2である。
const item : SubClass1 = sub1List . get ( 0 );
// したがって、したのコードの出力は
// undefined baz
// となる。
console . log ( item . email ,( item as SuperClass as SubClass2 ). address )
原创声明:本文系作者授权爱码网发表,未经许可,不得转载;
原文地址:https://HdhCmsTestlikecs测试数据/show-308628262.html
查看更多关于TypeScript 中的泛型是协变的,因此请谨慎使用它们的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did223349