下面的代码:
我的目标是attribute1将是number[],attribute2将是string[],attribute3将是number[]。如果我试图执行下面的obj.attributes.attribute2 = [1, 2, 3];
行,我如何使用typescript实现这一目标,以便出现编译错误
type MyFields = "attribute1" | "attribute2" | "attribute3";
type MyTypes = number[] | string[] | number[];
interface DynamicType {
attributes: {
[attribute in MyFields]: MyTypes;
};
}
const obj: DynamicType = {
attributes: {
attribute1: [],
attribute2: [],
attribute3: [],
},
};
obj.attributes.attribute1 = [1, 2, 3];
obj.attributes.attribute2 = [1, 2, 3]; // i need to have a compilation error here!
obj.attributes.attribute1 = [1, 2, 3];
1条答案
按热度按时间osh3o9ms1#
使用类型Assert来指定属性对象中每个属性的类型。
TypeScript编译器会给予您一个错误,因为attribute2属性被定义为string[],而您正试图给它分配一个type number[]的值。