Typescript 将参数用作泛型类型,并为其指定默认赋值
我有一个简单的类Typescript 将参数用作泛型类型,并为其指定默认赋值,typescript,Typescript,我有一个简单的类Board,在构造函数中有参数width、height和type。高度和宽度将始终具有类型编号,但类型是任何类型的数组 我想做的是使用泛型类型捕获types参数的类型。然后可以使用T返回另一个使用this.types的函数。问题是,我还想将默认类型设置为数字数组 这是我认为可能有效的方法,但我当前得到的错误是:类型“number[]”不可分配给类型“T[]”类型“number”不可分配给类型“T” export class Board<T> { constru
Board
,在构造函数中有参数width
、height
和type
。高度和宽度将始终具有类型编号
,但类型
是任何类型的数组
我想做的是使用泛型类型捕获types
参数的类型。然后可以使用T
返回另一个使用this.types的函数。问题是,我还想将默认类型设置为数字数组
这是我认为可能有效的方法,但我当前得到的错误是:类型“number[]”不可分配给类型“T[]”类型“number”不可分配给类型“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;
}
}
导出类板{
构造函数(宽度:number=8,高度:number=8,类型:T[]=[0,1,2,3,4,5,6]){
这个。宽度=宽度;
高度=高度;
this.types=类型;
}
getTypes():T[]{
返回此.types;
}
}
我做错了什么?或者这种设置可能吗
我最终想要的是将
T
分配给this.types
在类被实例化之后的任何类型。如果我调用新板(8,8,['a','b','c','d'])
,我想知道T
应该是string
。如果我只是调用newboard()
,它就会知道T
应该是number
更好的方法使用:
不能将数字数组用作
t
s数组的默认值,因为您不知道t
是否为number
。如果你调用新板(8,8)
,会发生什么?好的,这是有道理的,但是我如何设置T
依赖于这个。类型被分配给什么?我非常喜欢这个,它可以用于我正在尝试的工作。但是,我很好奇是否有一种方法可以在引用this.types的类中设置要使用的别名。类似于typez=typeof this.orbs
和getTypes():Z[]{返回this.types}
。但我不知道如何让这个想法起作用。在类内创建类型别名是不可能的。请查看更新的答案,因为旧答案有漏洞。好的。这个答案肯定给了我所需要的信息。实际上,我所寻找的是一种在类中使用类型别名的方法,但遗憾的是,这无法实现。在这种情况下,最好只使用类型:any[]
。这不太具体,但没关系。
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;
}
}
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;
}
}