【发布时间】:2019-05-03 02:32:34
【问题描述】:
我正在尝试访问可以是 {} 的对象的属性。
所以我正在做这样的事情:
// component is the object which can be emtpy {}
if (component.children) return method(component.children)
虽然,即使我确保 .children 存在,打字稿仍抱怨它不存在(也在 if 条件下)。
这在 IMO 中很奇怪,因为如果我们断言某个属性存在(或不存在)它为什么会抱怨?
例子:
type OtherType = { name: string };
type TestType = {} | OtherType;
function method(variable: TestType): string {
if (!variable.name) return ''
return variable.name;
}
这将抛出Property 'name' does not exist on type '{}'.,正如在TypeScript Playground 中看到的那样
【问题讨论】:
-
但错误表明您的
component被声明为简单的空对象{},因此当您最后执行component.props时,该属性不存在。您也应该在 IDE 中看到此错误,而不是在运行时 -
那么在打字稿中,这些对类型的严格检查不如在 JS 中有用。如果你说你的参数应该是
ReactNode,它不能是undefined,这应该会触发一个错误,所以示例你永远不会遇到返回空字符串的情况 -
如果
{}是唯一的可能性,那会很好,但可以是很多其他包含.props的对象。{}设置为type ReactFragment = {} | ReactNodeArray;的一种可能性,即使那样它也可能是ReactNodeArray。 -
@quirimmo
ReactNode可以是... | null | undefined -
是的,我现在正在查看源代码,该类型定义为:
type ReactNode = ReactChild | ReactFragment | ReactPortal | boolean | null | undefined;
标签: javascript typescript