Typescript:组合类型不存在属性?

约西亚

以下是抽象的TS方案:

interface EmotionsOkay {
  emotion: string;
  okay: "yap";
}
interface EmotionsNotOkay {
  emotion: string;
}
type UndetereminedEmotion = EmotionsOkay | EmotionsNotOkay;
const areYouOkay = (test: UndetereminedEmotion) => {
  console.log(test.okay ? "happy :D" : "sad D:");
};

在控制台日志记录时抛出TypeScript错误test.okay,因为它显然不存在。

Property `okay` does not exist on type `UndetereminedEmotion`.

即使传递给该方法的测试类型为,也很可能存在EmotionsOkay

为什么会这样?

尼古拉斯

此时,TS不知道它是什么类型,可能是什么类型EmotionsOkay,一切都会好起来,或者可能是,EmotionsNotOkay并且该属性okay将不存在。这就是为什么您会收到此错误。您需要验证它是哪种类型。

您可以使用in关键字来验证这一点,

interface EmotionsOkay {
  emotion: string;
  okay: "yap";
}
interface EmotionsNotOkay {
  emotion: string;
}
type UndetereminedEmotion = EmotionsOkay | EmotionsNotOkay;
const areYouOkay = (test: UndetereminedEmotion) => {
  console.log('okay' in test && test.okay ? "happy :D" : "sad D:");
};

如果您首先没有财产okay您就不会幸福

如果您想知道为什么不能instanceof在这种情况下使用,请查看此问题

这是一个游乐场

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

TypeScript类型不存在属性“ load”?

TypeScript中的类型不存在属性

枚举类型不存在Typescript属性

TypeScript - 类型上不存在属性(但它存在)?

TypeScript:禁止联合类型的“类型上不存在属性”

属性“类型”不存在

TypeScript + Express:类型“ IncomingMessage”上不存在属性“ rawBody”

与 TypeScript 反应 - 类型“EventTarget”上不存在属性“value”

类型'FileList'上不存在TypeScript属性'forEach'

类型'ChildNode [Typescript]上不存在属性'tagName'

TypeScript 4-类型编号不存在属性查找[]

TypeScript Joi:类型“ Root”上不存在属性“ validate”

Typescript 属性在类型元素上不存在

类声明-TypeScript中的类型不存在属性

TypeScript中的EventTarget类型不存在属性“值”

TypeScript错误:类型“ Navigator”上不存在属性“ app”

Typescript中的类型“ Date”上不存在属性“ getWeek”

TypeScript:类型上不存在属性“范围”

ReactJS 中的 Typescript 错误 - 类型上不存在属性

Typescript属性“ length”在类型上不存在

TypeScript中的“ EventTarget”类型错误不存在属性“文件”

属性“名称”在类型“ EventTarget”上不存在-React + TypeScript

Typescript 的“对象”错误类型上不存在属性

使用TypeScript时获取类型的属性不存在错误

TypeScript:类型“any[]”上不存在属性“name”

RxJs / Typescript抛出“类型为{}的属性clientX不存在”

类型'ElementFinder'上不存在Typescript属性

TypeScript:类型“ Function”上不存在属性“ propertyName”

VueJS + Typescript:类型上不存在属性