![]() |
1
2
您不能访问联盟中不是所有联盟成员共有的字段。 想到的选项是类型守卫或使用不同类型的道具当你真正使用它们。
简单选项是一个类型保护,只需使用
第二个更复杂的解决方案是从
这种新类型仍然与您原来的props兼容,因此我们只需要一个这种类型的局部变量并将其与类props一起分配。
|
![]() |
2
1
您的“可识别”道具可以是“WithToken”类型,它没有属性“id”。编译器正确地将当前使用标记为错误。 通过使用“type guard”并将呈现代码包装到if语句中来解决这个问题。
|
![]() |
3
0
其他答案中提出的使用类型保护可以满足编译器要求的共同思想是正确的,并且工作良好。但是,受union类型工作方式和问题中引用的答案的启发,我决定尝试构建一个不需要类型保护的泛型类型(请注意,尽管类型保护对于TypeScript编译器不是必需的,检查JavaScript中的对象上是否存在属性仍应在运行时完成,具体取决于您的场景)。
一般的想法是在具有相同属性的两个类型之间有一个联合类型。这样就不需要使用类型保护。在这两种类型中的每一种上,都会根据需要标记一个或另一个属性。这要求在“base”接口中将这两个属性标记为可选。 这个例子可以泛化
因此扩展为接受多个属性。接受属性名“列表”的泛型类型(属性名的子集
|
![]() |
Ângelo Rigo · ReactJS映射:如何迭代[关闭] 7 月前 |
![]() |
vatsal chauhan · 即使在字体预加载时,文本加载也很慢 8 月前 |
![]() |
noblerare · Vite错误-未定义导出(SSR) 8 月前 |