键入TypeScript Generic的安全性

时间:2018-01-14 16:44:35

标签: typescript generics type-safety

我不确定我做错了,或者这是不是设计......

在我班上

class List<T> { ... }

我有一个方法

public Add(value: T): void { ... }

我创建了一个列表实例

const fooList: List<foo> = new List<foo>();

但现在我仍然可以

fooList.Add(new bar());

foo和bar是不相关的类型。这不会触发编译器警告,我对此有点迟疑。

我做错了,还是按预期进行?

1 个答案:

答案 0 :(得分:1)

  

我做错了,还是按预期进行?

如果类型兼容,则允许例如

class List<T> {
  add(val: T) { }
}

class Animal { name: string; }
class Cat extends Animal { meow() { } }

const animals = new List<Animal>();
animals.add(new Animal()); // Okay 
animals.add(new Cat()); // Okay 

const cats = new List<Cat>();
cats.add(new Animal()); // Error 

更多