如果您阅读代码,您会发现类泛型并不安全。 (为了清楚起见,我并不是说你应该避免使用泛型,只是如果你在使用泛型的类中有不同的类型参数,你应该小心。我喜欢类型难题。)
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://www.likecs.com/show-308628262.html
查看更多关于TypeScript 中的泛型是协变的,因此请谨慎使用它们的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did223349