我有通用方法,用于从其他对象内的对象获取字段
function myGenericMethod<T, K extends keyof T, S extends keyof T[K]>(obj: T, key?: K, subkey?: S) {
}
但是当对象可能未定义或为空时 TypeScript 在按键 S
上警告我myGenericMethod(myEmployee, 'position', 'id');
Argument of type '"id"' is not assignable to parameter of type 'undefined'.ts(2345)
接口示例
interface IPosition{
id: number,
name: string
}
interface IEmployee{
id : number;
name? : string;
position? : IPosition;
}
const myEmployee : IEmployee = {
id: 1,
name: "Jhon",
position:
{
id : 1,
name: "Waiter"
}
}
它的工作,但编译器警告我。如何正确地编写这段代码。 如果我使 position 字段未定义错误就消失了。
您可以利用 TypeScript 的 NonNullable 来确保您的子键仅当您的键引用非
null
或 undefined
值时才有效。
function myGenericMethod<
T,
K extends keyof T,
S extends keyof NonNullable<T[K]>,
>(obj: T, key?: K, subkey?: S) {
// your implementation
}