假设我有一个这样的函数
const func = (obj,key) => {
console.log(obj[key])
}
我做了如下操作
const func = (obj:{
[key:string]:any
},key:string) => {
console.log(obj[key])
}
显然这样无法确保obj上我可以正确访问到变量key这个属性。
我如何使用TypeScript来确保我得到的参数obj上一定有key这个属性?
假设我有一个这样的函数
const func = (obj,key) => {
console.log(obj[key])
}
我做了如下操作
const func = (obj:{
[key:string]:any
},key:string) => {
console.log(obj[key])
}
显然这样无法确保obj上我可以正确访问到变量key这个属性。
我如何使用TypeScript来确保我得到的参数obj上一定有key这个属性?
把函数的入参通过接口来定义
interface obj {
key: string,
firstName: string
}
const func = (params: obj) => {
console.log(params);
}
func({key: '1', firstName: '2'});
如果入参不满足接口定义类型,TS会报错
const func = <T extends string>(obj: Record<T, any>, key: T) => {
return obj[key];
};
// 调用
func({a: ''}, 'a');
这样试试?
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
感谢回答,最后深入发现keyof关键字可以获得最佳的实现效果。