将数组的元素关联为属性Typescript的类型
有没有办法将属性的类型指定为数组的元素?我有以下课程:将数组的元素关联为属性Typescript的类型,typescript,types,Typescript,Types,有没有办法将属性的类型指定为数组的元素?我有以下课程: class SomeClass { color: 'red' | 'blue'; } 是否有方法使用允许的颜色创建数组并将其指定给colortype class SomeClass { color: *some way to get "'red' | 'blue'" from allowedColors*; allowedColors = ['red', 'blue']; } 默认情况下,allowedColors=['re
class SomeClass {
color: 'red' | 'blue';
}
是否有方法使用允许的颜色创建数组并将其指定给color
type
class SomeClass {
color: *some way to get "'red' | 'blue'" from allowedColors*;
allowedColors = ['red', 'blue'];
}
默认情况下,
allowedColors=['red'、'blue']
将推断allowedColors
的类型为string[]
,使用类似的技巧,我们可以说服编译器将其键入('red'|'blue')[/code>,一旦我们有了它,我们就可以将color
键入与该数组的元素具有相同类型:
function arrayTypeHelper<T extends string>(o: Array<T>): T[] {
return o;
}
class SomeClass {
static allowedColors = arrayTypeHelper(['red', 'blue']);
color: typeof SomeClass.allowedColors[0]; // 'red' | 'blue'
}
注意我更改了允许颜色
为静态
和只读
,因为基于这个问题,字段可能不应该是可变的,并且对于类的所有实例都是相同的。这也是进行相关键入所必需的
注2虽然此解决方案在您当前设计的约束范围内工作,但也许您应该考虑作为替代方案。默认情况下allowedColors=['red','blue']
将推断allowedColors
的类型为string[]
,使用类似于的技巧,我们可以说服编译器将其键入为('red'|'blue')[
一旦我们有了它,我们就可以键入color
作为与该数组的元素具有相同的类型:
function arrayTypeHelper<T extends string>(o: Array<T>): T[] {
return o;
}
class SomeClass {
static allowedColors = arrayTypeHelper(['red', 'blue']);
color: typeof SomeClass.allowedColors[0]; // 'red' | 'blue'
}
注意我更改了允许颜色
为静态
和只读
,因为基于这个问题,字段可能不应该是可变的,并且对于类的所有实例都是相同的。这也是进行相关键入所必需的
注2虽然此解决方案在您当前设计的约束范围内工作,但也许您应该考虑作为替代方案。我认为,将颜色声明为枚举是最常见的方法,AllowedColor应该从枚举中读取允许的值:
enum Color {
red,
blue,
}
private allowedColors: Color[] = Object.keys(Color).map(key => Color[key]);
private color: Color = allowedColors[0];
我认为这是将颜色声明为枚举的最常见方式,AllowedColor应该从枚举中读取允许的值:
enum Color {
red,
blue,
}
private allowedColors: Color[] = Object.keys(Color).map(key => Color[key]);
private color: Color = allowedColors[0];