gpt4 book ai didi

typescript - 使用参数作为泛型类型,也给它一个默认赋值

转载 作者:搜寻专家 更新时间:2023-10-30 21:30:44 24 4
gpt4 key购买 nike

我有一个简单的类 Board带有参数 width , height , 和 types在构造函数中。高度和宽度的类型始终为 number ,但是types是任何类型的数组。

我想做的是捕获 types 的类型使用通用类型的参数 <T> .那么T可用于返回另一个使用 this.types 的函数.问题是我还想将默认类型设置为数字数组。

这是我认为可行的方法,但我目前收到错误 Type 'number[]' is not assignable to Type 'T[]' Type 'number' is not assignable to Type 'T' .

export class Board<T> {
constructor(width: number = 8, height: number = 8, types: T[] = [0, 1, 2, 3, 4, 5, 6]) {
this.width = width;
this.height = height;
this.types = types;
}
getTypes(): T[] {
return this.types;
}
}

我做错了什么?或者这种设置甚至可能吗?

我最终想要的是 T分配给 this.types 的任何类型最终在类被实例化之后。如果我调用 new Board(8, 8, ['a', 'b', 'c', 'd']); , 我希望它知道 T应该是 string .如果我调用 new Board()它会知道 T应该是 number .

最佳答案

更好的方法 使用 advanced types :

class Board<T> {
private width:number;
private height:number;
private types:T[]|number[];

constructor(width:number = 8, height:number = 8, types:T[]|number[] = [1, 2]) {
this.width = width;
this.height = height;
this.types = types;
}

getTypes():T[]|number[] {
return this.types;
}
}

https://jsfiddle.net/r8uqn760/2/

旧答案 使用 type alias :

这种方法将始终允许 this.types 数组中的数字。

例如 new Board(0, 0, [0, "foo"]) 将在编译时通过,我认为这不是你想要发生的。

type X<Y> = number | Y;

class Board<T> {
private width:number;
private height:number;
private types:X<T>[];

constructor(width:number = 8, height:number = 8, types = [1,2] as X<T>[]) {
this.width = width;
this.height = height;
this.types = types;
}

getTypes():X<T>[] {
return this.types;
}
}

Fiddle

关于typescript - 使用参数作为泛型类型,也给它一个默认赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38232987/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com