在类型的动态索引中"Element implicitly has an 'any' type because expression of type"



我在设置变量typeof时遇到了麻烦。

What I have:

let filterStatus:{
'`filter[or][${number}][status]`' ?:string
} = {};

和${number}是动态的,我想用这种方式传递给我的变量:


filterStatus[`filter[or][${2}][status]`] = 'pending';

和typescript返回这个错误:


Element implicitly has an 'any' type because expression of type '"filter[or][2][status]"' can't be used to index type '{ '`filter[or][${number}][status]`'?: string | undefined; }'.
Property 'filter[or][2][status]' does not exist on type '{ '`filter[or][${number}][status]`'?: string | undefined; }'.

它是后端希望我发送的字符串结构

参见playground中的示例

任何帮助都将不胜感激

filterStatus的属性目前不是模板文字类型。您只是将其硬编码为字符串字面值filter[or][${number}][status],它不尊重${number}作为数字的占位符。

必须使用映射类型

let filterStatus:{
[K in `filter[or][${number}][status]`]?: string
} = {};
这将给出filterStatus的类型和索引签名。这些可以是模板文字类型
let num = 2;
filterStatus[`filter[or][${num}][status]`] = 'pending'; // valid
filterStatus[`filter[or][2][status]`] = 'pending';      // valid
filterStatus[`filter[or][abc][status]`] = 'pending'; // compile time error
游乐场

相关内容

  • 没有找到相关文章