programing

TypeScript 주의를 제거하는 방법: 'length' 속성이 '{}' 유형에 없습니다.

padding 2023. 6. 7. 22:11
반응형

TypeScript 주의를 제거하는 방법: 'length' 속성이 '{}' 유형에 없습니다.

TypeScript 파일에서 3D 배열을 정의했습니다.

var myArr = ['one', [[19, 1], [13, 1], [86, 1], [12, 2]],
             'two',    [[83, 1], [72, 1], [16, 2]],
             'three',  [[4, 1]]];

function testArray(){
    console.log(myArr[1].length);
}

length 속성 아래에 경고가 표시됩니다.

'length' 속성이 '{}' 유형에 없습니다.

이 경고를 제거하기 위해 제가 할 수 있는 일이 있나요?

저는 여기서 비슷한 게시물을 읽었습니다.Typescript를 사용할 때 "Property is not exist on type JQuery" 구문 오류를 중지하려면 어떻게 해야 합니까?

그것은 제가 <아무것이나>에 캐스팅할 수 있다는 것을 설명합니다.

이것은 저에게 효과가 있었습니다.

function testArray(){
    console.log((<any>myArr[1]).length);
}

옵션 1: 최첨단 컴파일러로 업그레이드하고 유니온 유형 가져오기

옵션 2: 변수 선언에 유형 주석을 추가합니다.

var myArr: any[] = ['one', [[19, 1], [13, 1], [86, 1], [12, 2]],
             'two',    [[83, 1], [72, 1], [16, 2]],
             'three',  [[4, 1]]];

function testArray(){
    console.log(myArr[1].length);
}

Object.values() 메서드는 for...in 루프에서 제공하는 것과 같은 순서로 지정된 개체 자체의 열거 가능한 속성 값 배열을 반환합니다. (단 한 가지 차이점은 for...in 루프가 프로토타입 체인의 속성도 열거한다는 것입니다.)

Object.values(myArr).length

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Object/values

이전에 이 오류에 직면한 적이 있습니다. 유형을 임의로 캐스팅하고 제네릭을 사용할 때 확장해야 합니다.

블로우 예를 확인합니다.

const result = <T extends any>(arr:T[]):T => {
  return arr[arr.length - 1] 
}

result([1,2,3])

인터페이스/유형/클래스가 이미 구성되어 있고 길이나 다른 것을 원하는 사람들을 위해 제가 사용하는 제안이 있습니다.클래스 안에 인터페이스를 입력하고 아래에 코드를 입력합니다.정의되지 않은 특성에 대해서만 알 수 없음으로 설정됩니다.끝에 둘 필요는 없습니다. 원하는 경우 별도의 인터페이스를 만들고 개체로 확장하는 것이 좋습니다.

export interface x {
...
[props: string]: unknown 
...
}

이렇게 하면 개체에 있는 속성 이름을 사용할 수 있습니다. 듣기에 나쁘지만 실제로는 그렇지 않습니다.이는 알 수 없는 각 속성에 대해 강제(T)가 적용되기 때문입니다.S4.4+)를 사용할 때 다른 유형으로 강제 변환합니다(예:

(object.length as number). 

가능한 속성 유형을 분석할 때는 더 주의해야 하며 존재하지 않는 속성에 액세스하려고 하지 않습니다.개체 자동 완성에 대해 걱정하지 마십시오. 개체가 계속 정상적으로 작동합니다.

언급URL : https://stackoverflow.com/questions/27089452/how-to-remove-typescript-warning-property-length-does-not-exist-on-type

반응형