我在设置变量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
游乐场