为什么受歧视的union typescript不';不行?
我有这些类型为什么受歧视的union typescript不';不行?,typescript,Typescript,我有这些类型 type TARGET\u EDIT\u SKILL={ “技能”部分; 属性:'类型'; 指标:数量; foobar:字符串; }; 类型目标\编辑\体验={ “经验”一节; 属性:“时间”|“位置”|“名称”|“摘要”; 指标:数量; }; 类型操作\u编辑\u节={ 类型:编辑部分的类型; 有效载荷:{ 目标:目标编辑技能、目标编辑经验; 值:字符串; }; }; 导出类型操作= |操作\u更新\u数据 |操作\编辑\标题 |动作编辑技巧 |行动(编辑)部分;; 然后在减速
type TARGET\u EDIT\u SKILL={
“技能”部分;
属性:'类型';
指标:数量;
foobar:字符串;
};
类型目标\编辑\体验={
“经验”一节;
属性:“时间”|“位置”|“名称”|“摘要”;
指标:数量;
};
类型操作\u编辑\u节={
类型:编辑部分的类型;
有效载荷:{
目标:目标编辑技能、目标编辑经验;
值:字符串;
};
};
导出类型操作=
|操作\u更新\u数据
|操作\编辑\标题
|动作编辑技巧
|行动(编辑)部分;;
然后在减速器中
case actions.EDIT_部分:{
const{target,value}=action.payload;
const{section,property,index}=target;
如果(部分==‘技能’){
console.log(target.foobar);
返回属性=='time';
}
...
}
但我得到了typescript错误“属性'foobar'在类型'TARGET\u EDIT\u EDUCATION'上不存在”。为什么?我想如果我用截面条件缩小类型,那么foobar肯定存在。为什么returnproperty==='time'代码>不是类型从不<代码>时间
在带有“技能”部分的类型上不存在
--编辑
还有一件事,我有
const newSetion = [...state[target.section]];
// const newSection: (Skill | Education | Experience | Language)[]
为什么它说属性“type”在类型“Skill | Experience | Education | Language”上不存在。
如果它已经知道newSection
是状态。skills
和Propertytype
在那里存在。您已经将对象拆分为独立的局部变量,因此,类型之间不再有联系。检查局部变量部分的类型对目标的类型没有影响。您和我可能能够看到这种关系,但typescript无法回溯到类型是如何产生的,然后计算其他变量的所有结果
要缩小target
的类型,需要检查target
上的属性,如中所示:
if (target.section === 'skills') {
// now the type on target has been narrowed
console.log(target.foobar)
}
虽然我相信您会遇到另一个问题,section
不会出现在您的联合体中所有可能的类型上,因此typescript将不允许您访问target.section
。因此,您需要:
if ('section' in target && target.section === 'skills) {
您已将对象拆分为独立的局部变量,因此类型之间不再存在链接。检查局部变量部分的类型对目标的类型没有影响。您和我可能能够看到这种关系,但typescript无法回溯到类型是如何产生的,然后计算其他变量的所有结果
要缩小target
的类型,需要检查target
上的属性,如中所示:
if (target.section === 'skills') {
// now the type on target has been narrowed
console.log(target.foobar)
}
虽然我相信您会遇到另一个问题,section
不会出现在您的联合体中所有可能的类型上,因此typescript将不允许您访问target.section
。因此,您需要:
if ('section' in target && target.section === 'skills) {
如果您将其作为target.section==“skills”
,它是否会改变?请提供可复制的示例这是否回答了您的问题?请提供一份报告。确保它是完整的,并且提到了所有相关类型,如Skill
和其他类型。另外,请在一个问题中只关注一个问题。如果您将其作为target.section==“skills”
,它是否会改变?请提供可复制的示例这是否回答了您的问题?请提供一份报告。确保它是完整的,并且提到了所有相关类型,如Skill
和其他类型。另外,请在一个问题中只关注一个问题。请检查Edit@MateuszPiguła请在一个问题中只关注一个问题/错误。请检查Edit@MateuszPiguła请在一个问题中只关注一个问题/错误。