TypeScript 通用方法可以在子对象键可能未定义时访问它

问题描述 投票:0回答:1

我有通用方法,用于从其他对象内的对象获取字段

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 typescript-generics
1个回答
0
投票

您可以利用 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
}
© www.soinside.com 2019 - 2024. All rights reserved.