Javascript 基于对象属性文字类型的不相交联合类型
我试图正确地键入一个对象,该对象的定义根据其某个属性的值而更改。为下面的Javascript 基于对象属性文字类型的不相交联合类型,javascript,flowtype,Javascript,Flowtype,我试图正确地键入一个对象,该对象的定义根据其某个属性的值而更改。为下面的type使用常量可以很好地工作(即:将type:typeA替换为type:1修复了错误),但为了代码库的清晰性,我想使用从共享constants.js导入的常量。为什么flow对此不高兴 const typeA = 1; const typeB = 2; type pA = { type: typeA, // ^ Cannot use number as a type because number is a
type
使用常量可以很好地工作(即:将type:typeA
替换为type:1
修复了错误),但为了代码库的清晰性,我想使用从共享constants.js
导入的常量。为什么flow对此不高兴
const typeA = 1;
const typeB = 2;
type pA = {
type: typeA,
// ^ Cannot use number as a type because number is a value. To get the type of a value use `typeof`.
vA: string,
};
type pB = {
type: typeB,
vB: string,
};
type p = pA | pB;
const getV = (proj): string => {
switch (proj.type) {
case typeA: {
return proj.vA;
}
case typeB: {
return proj.vB;
}
}
return '';
}
您需要将A和B声明为类型,然后使用
typeof
/* @flow */
type A = 1;
type B = 2;
type pA = {
type: A,
vA: string,
};
type pB = {
type: B,
vB: string,
};
type p = pA | pB;
const getV = (proj): string => {
switch (proj.typeof) {
case "A": {
return proj.vA;
}
case "B": {
return proj.vB;
}
}
return '';
}
哇,这看起来真奇怪。这是可行的,但我认为我的实际代码库中还有另一个问题。谢谢你的帮助<代码>项目类型未在
p
类型上定义;此外,它应该是1
和2
上的外壳,而不是“A”
或“B”
上的外壳