【发布时间】:2020-03-10 23:40:55
【问题描述】:
我有一个带有一些可选字段和该类型变量的 TypeScript 接口:
interface Foo {
config?: {
longFieldName?: string;
}
}
declare let f: Foo;
我想将longFieldName 放入同名变量中。
如果config 不是可选的,我会使用destructuring assignment 来执行此操作,而无需重复longFieldName。但它是,所以我得到一个类型错误:
const { longFieldName } = f.config;
// ~~~~~~~~~~~~~ Property 'longFieldName' does not exist on type '{ longFieldName?: string | undefined; } | undefined'.
我可以使用optional chaining简洁地处理undefined的情况:
const longFieldName = f?.config.longFieldName; // OK, type is string | undefined
但现在我必须重复longFieldName。
我的蛋糕也可以吃吗?我可以使用可选链接来处理undefined 的情况而不重复longFieldName 吗?如果不是,最简洁/惯用的解决方法是什么?见playground link。
【问题讨论】:
-
目前超出 ecma t39 的范围:github.com/tc39/proposal-optional-chaining/issues/74
标签: javascript typescript optional-chaining