Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 将参数用作泛型类型,并为其指定默认赋值_Typescript - Fatal编程技术网

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;
    }
}