TypeScript 在接口中添加了对特定键的类型支持和相同的匹配值



以下面的例子为例。

interface MyObj = {
name: string;
id: number;
isMandatory?: boolean;
}

我有一个如下函数,它从"MyObj"中获取键和值之一。

function sampleFn(key, value) {
// do something
}

如何在 sampleFn 函数中添加类型检查。 例如,如果我将键传递为"id",它应该首先检查是否允许 id,然后值应该是"数字"类型。

您可以使用查找类型:

interface MyObj {
name: string;
id: number;
isMandatory?: boolean;
}
function sampleFn<K extends keyof MyObj>(key: K, value: MyObj[K]) {}
sampleFn('name', 'X'); // OK
sampleFn('number', 0); // Error, key does not exist
sampleFn('name', 0);   // Error, value is of incorrect type

在上面的示例中,key参数定义为必须是MyObj接口的键,value参数必须属于与key定义的属性对应的类型。

最新更新