未知的 Typescript 属性类型保护

Vin*_*243 6 typescript typeguards

我正在尝试输入守卫未知类型

const foo  = (obj: unknown) => {
    if (typeof obj === 'object' && obj) {
        if ('foo' in obj && typeof obj.foo === 'string') {
            return obj.foo;
        }
    }
};
Run Code Online (Sandbox Code Playgroud)

但我越来越

属性“foo”在类型“object”上不存在。

我也尝试过 is 表达式不起作用:

const foo  = (obj: unknown): obj is { foo: 'string' } => {
    if (typeof obj === 'object' && obj) {
        if ('foo' in obj && typeof obj.foo === 'string') {
            return obj;
        }
    }
    throw new Error();
};
Run Code Online (Sandbox Code Playgroud)

Cer*_*rus 3

你必须在这里给 TypeScript 一些帮助:

type fooObj = object & { foo: unknown };
const foo = (obj: unknown) => {
    if (typeof obj === 'object' && obj) {
        if ('foo' in obj && typeof (obj as fooObj).foo === 'string') {
            return (obj as fooObj).foo;
        }
    }
};
Run Code Online (Sandbox Code Playgroud)