属性 'date' 在类型 '{} | 上不存在{ 日期:字符串; }'
Property 'date' does not exist on type '{} | { date: string; }'
总的来说,我对打字稿和类型还是陌生的,但这个错误真的让我很困惑。我正在使用 npm 模块 query-string
将查询字符串解析为 key/value 对的对象。但我不确定设置 return 值的最佳方式是什么。 query-string
使用 .parse()
方法将 return 一个 key/value 对的对象或一个空对象。
示例:
queryString: { date: string } | {} = queryString.parse(location.search);
当我尝试使用 queryString.date
访问 属性 时出现此错误:Property 'date' does not exist on type '{} | { date: string; }'
我确定我在这里遗漏了一些基本的东西,我就是想不通。
您也将 queryString 属性 声明为空对象 {}。简单地说,{}
没有 属性 date
.
只需将 日期 设为可选 属性。
queryString: { date?: string } = queryString.parse(location.search);
不要设置任何内容 -- TypeScript 将根据 return 值自动推断类型。
queryString = queryString.parse(location.search);
TypeScript 所说的是真的。如果某物是 {}
或 {date: string}
,则无法保证 .date
会存在。 TypeScript 尊重这一点并适当地出错。这是期望的行为。
当您尝试访问 属性; transpiler 不知道 是否要将对象用作空对象或带日期的对象。
有几种方法可以解决这个问题:
1: queryString: { date?: string } = queryString.parse(location.search);
从本质上讲,这意味着该对象可以具有 date
属性 但这不是必需的。如果您希望 queryString.date
是正确的 date
或 undefined
,请使用此选项
2: 用 if 包围你的用法
就这么简单。
if(queryString.date !== undefined) {
const date = queryString.date;
//... Do stuff
}
3:(不建议)如果出于任何其他原因您只是对它是否存在不感兴趣,您可以通过 as
关键字[=18= 强制转译器将其视为一个或另一个]
const myDate: Date = (queryString as {date: Date}).date
总的来说,我对打字稿和类型还是陌生的,但这个错误真的让我很困惑。我正在使用 npm 模块 query-string
将查询字符串解析为 key/value 对的对象。但我不确定设置 return 值的最佳方式是什么。 query-string
使用 .parse()
方法将 return 一个 key/value 对的对象或一个空对象。
示例:
queryString: { date: string } | {} = queryString.parse(location.search);
当我尝试使用 queryString.date
访问 属性 时出现此错误:Property 'date' does not exist on type '{} | { date: string; }'
我确定我在这里遗漏了一些基本的东西,我就是想不通。
您也将 queryString 属性 声明为空对象 {}。简单地说,{}
没有 属性 date
.
只需将 日期 设为可选 属性。
queryString: { date?: string } = queryString.parse(location.search);
不要设置任何内容 -- TypeScript 将根据 return 值自动推断类型。
queryString = queryString.parse(location.search);
TypeScript 所说的是真的。如果某物是 {}
或 {date: string}
,则无法保证 .date
会存在。 TypeScript 尊重这一点并适当地出错。这是期望的行为。
当您尝试访问 属性; transpiler 不知道 是否要将对象用作空对象或带日期的对象。
有几种方法可以解决这个问题:
1: queryString: { date?: string } = queryString.parse(location.search);
从本质上讲,这意味着该对象可以具有 date
属性 但这不是必需的。如果您希望 queryString.date
是正确的 date
或 undefined
2: 用 if 包围你的用法 就这么简单。
if(queryString.date !== undefined) {
const date = queryString.date;
//... Do stuff
}
3:(不建议)如果出于任何其他原因您只是对它是否存在不感兴趣,您可以通过 as
关键字[=18= 强制转译器将其视为一个或另一个]
const myDate: Date = (queryString as {date: Date}).date