我一般还是不熟悉打字稿和打字机,但是这个错误确实使我感到困惑。我正在使用npm模块query-string
将查询字符串解析为键/值对的对象。但是我不确定设置返回值的最佳方式是什么。 query-string
使用.parse()
方法将返回键/值对的对象或空对象。
示例:
queryString: { date: string } | {} = queryString.parse(location.search);
当我尝试使用queryString.date
访问属性时,出现此错误:Property 'date' does not exist on type '{} | { date: string; }'
我确定我在这里缺少一些基本知识,只是无法弄清楚。
答案 0 :(得分:1)
只需将日期设置为可选属性。
queryString: { date?: string } = queryString.parse(location.search);
答案 1 :(得分:1)
当您尝试访问该属性时; Transpiler 不知道是要将对象用作空对象还是带日期的对象。
有几种解决方法:
1:used + 1
从本质上讲,这意味着该对象可以具有queryString: { date?: string } = queryString.parse(location.search);
属性,但这不是必需的。如果您想让date
成为queryString.date
或date
2:用if包围您的用法 就这么简单。
undefined
3 :(不建议使用)如果出于任何其他原因而对它是否存在不感兴趣,则可以通过if(queryString.date !== undefined) {
const date = queryString.date;
//... Do stuff
}
keyworord强制编译器将其视为一个或另一个。
as
答案 2 :(得分:0)
您正在将queryString属性也声明为空对象{}。简而言之,{}
没有属性date
。
答案 3 :(得分:0)
不做任何设置-TypeScript将根据返回值自动推断类型。
queryString = queryString.parse(location.search);
TypeScript所说的是真的。如果某物是{}
或{date: string}
,则不能保证.date
将会存在。 TypeScript尊重这一点并适当地排除了错误。这是期望的行为。