【发布时间】:2019-07-08 03:53:53
【问题描述】:
我有以下代码:
class AugmentedSet<T>{
private set: Set<T> = new Set<T>();
add (item: any){
this.set.add(item)
item._parent = this;
}
}
class Foo{}
class Bar{}
const foo = new Foo()
const bar = new Bar();
const augSet = new AugmentedSet<Foo>();
augSet.add(foo);
augSet.add(bar); // should not work, different type
我正在尝试创建一个增强Set 类的类。由于此示例中未显示的各种原因,我不想扩展Set,也不想修改文字Set 原型。相反,我只想创建一个类似 Set 的类型对象。
我期望发生的是 typescript 只允许通过 AugmentedSet.add() 添加 Foo 类,但它似乎允许 Foo 和 Bar。
我可能不明白如何正确键入此类/方法,所以我在这里寻找任何指导。 :)
【问题讨论】:
-
您声明
add采用any,因此它采用任何对象。如果您希望它采用T,请将其参数声明为T类型。 -
为什么需要
item._parent = this? -
就
item._parent = this而言,这是一种将项目容器设置为增强集的方法,因此如果我们需要从项目获取集合本身,我们可以这样做。我有一个使用类似模式的更复杂的示例(我正在尝试移植的 python 代码),这只是演示目的的一种快速简单的方法。将其更改为item: T会使此父属性分配失败,因为T不知道_parent:/
标签: typescript