【发布时间】:2021-05-30 18:03:45
【问题描述】:
如果这在某种程度上是 TypeScript 中的设计差距,我真的很好奇。 假设我有一个函数,它接受任何满足这个接口的对象
interface Params {
[key: string]: string | number | boolean | undefined | null;
}
所以key必须是字符串,属性的类型可以是primitive或者void。
如果我现在指定某个方法采用特定接口,而该接口本身就满足 Params 接口,我会收到错误消息,即另一个接口没有索引签名。 所以其他界面可能只是简单的样子。
interface Foo {
bar: string;
}
我也尝试将签名更改为Record<string, string | number | boolean | undefined | null>,但这也会导致缺少索引签名错误。
然后我的整个代码可能看起来像这样。给一个完整的画面。所以我需要在Object.entries中指定对象的键值类型才能进行某些操作
function specificFunction(obj: Foo) {
genericFunction(obj);
}
function genericFunction(params: Params) {
Object.entries(params).forEach(([key, value]) => {
…
})
}
编辑: 重要说明,specificFunction 的行为应该保持不变,因为它应该用于缩小允许的接口,因为在这种特殊情况下,只有具有某些属性的对象才被允许确保特定的结果。
【问题讨论】:
标签: typescript