对象中的“键”是否可用作Typescript中的类型保护?

时间:2019-09-23 19:50:10

标签: typescript

我不明白为什么Typescript在抱怨这段代码。

interface PaginationOptions {
    size?: number
    page?: number
}

function test(options?: PaginationOptions) {
    const size = options && 'size' in options ? options.size : 100
    // Typescript complains about `size` and `options.page` possibly undefined.
    const from = options && 'page' in options ? size * (options.page - 1) : 0

    return {
        size,
        from,
    }
}

'size' in options是否应该扮演类型保护者的角色?

enter image description here

1 个答案:

答案 0 :(得分:1)

因此,我对in运算符的理解不正确。 'key' in obj甚至在{ key: undefined }中也是正确的(正如@acdcjunior在评论中指出的那样。

因此,我选择将代码更改为此进行修复:

function test(options?: PaginationOptions) {
    const size = options && typeof options.size === 'number' ? options.size : 100
    const from = options && typeof options.page === 'number' ? size * (options.page - 1) : 0

    return {
        size,
        from,
    }
}