使用参数解构和null合并,typescript在可选的name
属性上有问题。我不想将原始代码更改为const name = data?.resource?.name ?? []
,这可能会使typescript感到高兴。我怎样才能改变类型脚本,使它能够处理空合并的参数解构?
代码
private _getName(data: Data) {
const { name } = data.resource ?? [];
类型:
type Data = {
fullUrl?: string,
resource?: {
active?: boolean,
address?: Address[],
birthDate?: string,
gender?: string,
id?: string,
identifier?: Indentifier[],
materialStatus?: Coding[],
meta?: Security[],
name?: Name[],
resourceType?: string,
telecom?: Telecom[],
},
search?: {
extension?: Extension[],
mode?: string,
score: number,
}
};
error:
error TS2339: Property 'name' does not exist on type '{ active?: boolean; address?: Address[]; birthDate?: string; gender?: string; id?: string; identifier?: Indentifier[]; materialStatus?: Coding[]; meta?: Security[]; name?: Name[]; resourceType?: string; telecom?: Telecom[]; } | undefined[]'.
73 const { name } = data.resource ?? []
2条答案
按热度按时间yv5phkfx1#
这一点:
还有这个
逻辑上不相等。
当
data.resource
是undefined
时,第一个解析为数组。所以const name
被赋予[]
的值。第二个期望
=
右侧的任何东西都具有name
属性,并且该name
属性的值将被分配给const name
。但是数组没有
name
属性,所以会得到一个类型错误,在运行时将是undefined
。为了使这个工作与解构,你必须确保无论是在右边这里有一个
name
属性。例如:
但那很傻。
我认为:
是这里最干净的解决方案。不建议使用解构赋值,除非所有可能被解构的值都支持被解构的属性。
请参见Typescript Playground。单击“Run”并查看自己的控制台输出。
inn6fuwd2#