类型“ {} |属性不存在日期” {date:string; }'

时间:2018-11-24 19:36:14

标签: javascript typescript query-string

我一般还是不熟悉打字稿和打字机,但是这个错误确实使我感到困惑。我正在使用npm模块query-string将查询字符串解析为键/值对的对象。但是我不确定设置返回值的最佳方式是什么。 query-string使用.parse()方法将返回键/值对的对象或空对象。

示例:

queryString: { date: string } | {} =  queryString.parse(location.search);

当我尝试使用queryString.date访问属性时,出现此错误:Property 'date' does not exist on type '{} | { date: string; }'

我确定我在这里缺少一些基本知识,只是无法弄清楚。

4 个答案:

答案 0 :(得分:1)

只需将日期设置为可选属性。

queryString: { date?: string } =  queryString.parse(location.search);

答案 1 :(得分:1)

当您尝试访问该属性时; Transpiler 不知道是要将对象用作空对象还是带日期的对象。

有几种解决方法:

1:used + 1 从本质上讲,这意味着该对象可以具有queryString: { date?: string } = queryString.parse(location.search);属性,但这不是必需的。如果您想让date成为queryString.datedate

合适的人,请使用此选项

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尊重这一点并适当地排除了错误。这是期望的行为。