>

이 코드가 있습니다 :

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])
    ));
}

settings[key].forEach( 에서  메시지가 나타납니다 :

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

isArray 가 아닌가  경비원 일을 하시겠습니까?


  • 답변 # 1

    타입 가드는 여기와 같은 게터 표현식과 작동하지 않습니다

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

    컴파일러가 settings[key] 를 확신 할 수 없기 때문에  (1)과 (2)에서 같은 것입니다. 먼저 임시 변수에 할당해야합니다 :

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

  • 이전 sql - Oracle에서 where 및 offset 페치 절이 작동하지 않는 단순 선택
  • 다음 기본 요소 반응 선택한 ListItem 스타일 처리