假设我们有一些参数是字符串的函数
const action = (param: string) => {
return param;
};
有一个通用类型
interface Relation<T, K extends keyof T> {
store: T;
storeKey: K;
}
该函数接受类型为Relation
的参数并执行action
const testFunction = <T, K extends keyof T>({ store, storeKey }: Relation<T, K>) => {
action(store[storeKey]);
};
现在TypeScript错误消息为store[storeKey] is not assignable to type string
,我理解原因。如果testFunction
不是字符串(没有类型保护,只有静态类型检查),有什么方法可以“弃用” T[K]
的调用?
UPD:T不仅可以具有字符串属性
答案 0 :(得分:0)
您应该指定更具体的类型,而不是T
。即T extends Record<string, string>
:
const action = (param: string) => {
return param;
};
interface Relation<T extends Record<string, string>, K extends keyof T> {
store: T;
storeKey: K;
}
const testFunction = <T extends Record<string, string>, K extends keyof T>({ store, storeKey }: Relation<T, K>) => {
action(store[storeKey]);
};