是否可以在函数中基于另一个参数检查一个参数的类型?有一个例子:
interface Data {
id?: number;
name?: string;
}
let data : Data = {};
// have no idea how to strict "value" argument
function update(field : keyof Data, value) {
data[field] = value;
}
update('id', 0); // [1] ok
update('name', 'foo'); // [2] ok
update('id', 'some string'); // [3] FAIL ("id" must be a number)
update('name', 123); // [4] FAIL ("name" must be a string)
update('other', 123); // [5] FAIL ("other" isn't possible argument)
我不确定是否可以这样做。在该示例中,仅呼叫号码[5]
将失败。
答案 0 :(得分:3)
添加可以是Data
的任意键的泛型,然后使用Data[K]
获得K的类型。
function update<K extends keyof Data>(field: K, value: Data[K]) {
data[field] = value;
}
使用1和2进行编译,使用3、4和5进行编译时会出错。