gpt4 book ai didi

typescript - 为什么这个类型保护在这个三元表达式中不起作用?

转载 作者:行者123 更新时间:2023-12-02 19:48:12 25 4
gpt4 key购买 nike

我有这个代码:

function isArray(v: any): v is any[] {
return Array.isArray(v);
}

type Settings = {
[key: string]: string | string[]
}

function myfunc(settings: Settings) {
Object.keys(settings).forEach(key => (
(isArray(settings[key]))
? settings[key].forEach(val => console.log(val))
: console.log(settings[key])
));
}

Playground link

settings[key].forEach( 我看到了消息:

Property 'forEach' does not exist on type 'string | string[]'.
Property 'forEach' does not exist on type 'string'.

那么为什么 isArray 类型保护不起作用?

最佳答案

类型保护不适用于 getter 表达式,如下所示

    (isArray(settings[key]))  // (1)
? settings[key].forEach(val => console.log(val)) // (2)

因为编译器无法确定 (1) 和 (2) 中的 settings[key] 是同一件事。您必须首先将其分配给临时变量:

    let temp = settings[key];
(isArray(temp))
? temp.forEach(val => console.log(val))
: console.log(temp)

关于typescript - 为什么这个类型保护在这个三元表达式中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58835585/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com