MST

星途 面试题库

面试题:TypeScript中null和undefined在泛型及条件类型中的复杂应用

编写一个TypeScript泛型函数`safeGet`,它接受一个对象`obj`、一个键`key`和一个默认值`defaultValue`。该函数应返回`obj[key]`,但如果`obj`为`null`或`undefined`,或者`obj[key]`为`null`或`undefined`,则返回`defaultValue`。要求使用条件类型来精确推断返回值的类型,使得返回值类型与`defaultValue`类型或者`obj[key]`的实际类型一致(在非`null`和非`undefined`情况下)。
47.2万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
function safeGet<Obj extends object | null | undefined, Key extends keyof Obj, Default>(
    obj: Obj,
    key: Key,
    defaultValue: Default
): Obj extends object
  ? Key extends keyof Obj
    ? NonNullable<Obj[Key]> | Default
    : Default
  : Default {
    if (obj === null || obj === undefined) {
        return defaultValue;
    }
    const value = obj[key];
    return value === null || value === undefined ? defaultValue : value;
}