Typescript -只有两种可能类型的泛型类



我试图创建一个泛型类,其中属性类型必须是字符串或数字(因为它被用作索引)。

如果我尝试下面的代码,它会报错

TS2536:类型'T'不能用于索引类型'{}'.

export class GenericClass<T> {
public selectionMap: {[id: T]: boolean} = {};
public isSelected(id: T): boolean {
return !!this.selectionMap[id];
}
public toggleSelected(id: T): void {
if (this.isSelected(id)) {
delete this.selectionMap[id];
} else {
this.selectionMap[id] = true;
}
this.onChange();
}
}

在我的例子中,我总是知道T将是一个数字或字符串。只是不知道怎么写才能保证类型安全。

尝试如下:

export class GenericClass<T = string | number> {}

export class GenericClass<T extends string, number> {}

另外,确保用于调用类的类型是小写的stringnumber。更多信息请看这个博客。

为什么在这种情况下使用泛型?只使用你想要的类型,或者定义一个适合你需要的类型:

type Id = number | string;
export class GenericClass {
public selectionMap: {[id: Id]: boolean} = {};
public isSelected(id: Id): boolean {
return !!this.selectionMap[id];
}
public toggleSelected(id: Id): void {
if (this.isSelected(id)) {
delete this.selectionMap[id];
} else {
this.selectionMap[id] = true;
}
this.onChange();
}
}

最新更新