我有一个函数 logNumbers
,它接受一个字典,其中所有键都是字符串,所有值都是数字。我想用属于更严格接口(interface)但仍满足这些条件的对象调用 logNumbers
。
interface NumberDictionary {
[key: string]: number;
}
interface StatisticsResult {
mean: number;
mode: number;
median: number;
}
function logNumbers(numDict: NumberDictionary) { ... }
const results: StatisticsResult = {
mean: 1,
mode: 2,
median: 2,
};
//
// Error:
// Argument of type 'StatisticsResult' is not assignable to parameter of type 'NumberDictionary'.
// Index signature is missing in type 'StatisticsResult'.
//
logNumbers(results);
我希望 StatisticsResult
保持不变,并以某种方式修改 logNumbers
的签名。有没有办法做到这一点?也许我可以向 typescript 发出信号,表示不会向 logNumbers
中的 numDict
添加新键?
最佳答案
如果您的目标是将函数限制为仅具有数字属性的对象,则可以使用将泛型类型参数限制为仅具有数字的记录。
interface StatisticsResult {
mean: number;
mode: number;
median: number;
}
function logNumbers<T extends Record<keyof T, number>>(num: T) {
// Log the numbers as a table or something
}
const results: StatisticsResult = {
mean: 1,
mode: 2,
median: 2,
};
//ok
logNumbers(results);
关于typescript - 将接口(interface)转换为字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54239647/