답변:
기존 답변에 옵션이 누락되었으므로 다음은 전체 목록입니다.
// 1. Explicitly declare the type
var arr: Criminal[] = [];
// 2. Via type assertion
var arr = <Criminal[]>[];
var arr = [] as Criminal[];
// 3. Using the Array constructor
var arr = new Array<Criminal>();
변수 선언에 대한 형식 유추가 실패 할 때마다 형식을 명시 적으로 지정하는 것이 일반적인 솔루션입니다.
타입 어설 션 (캐스트라고도하지만 타입 스크립트에서는 실제로 캐스팅 된 것이 아님) 을 사용하는 이점은 모든 표현식에서 작동하므로 변수가 선언되지 않은 경우에도 사용할 수 있습니다. 형식 어설 션에는 두 가지 구문이 있지만, 신경 쓰이는 경우에는 후자 만 JSX와 함께 작동합니다.
Array 생성자를 사용하면이 특정 사용 사례에서만 도움이되지만 개인적으로 가장 읽기 쉬운 것을 찾으십시오. 그러나 런타임 * 에는 약간의 성능 영향이 있습니다. 또한 누군가 누군가 Array 생성자를 재정의하기에 충분히 미쳤다면 의미가 바뀔 수 있습니다 .
개인적인 취향의 문제이지만 세 번째 옵션이 가장 읽기 쉽습니다. 대부분의 경우 언급 된 단점은 무시할 수 있고 가독성이 가장 중요한 요소입니다.
*: 재미있는 사실; 글을 쓰는 시점에서 Chrome에서는 성능 차이가 60 % 였지만 Firefox에서는 측정 가능한 차이가 없었습니다.
나는 이것이 오래된 질문이라는 것을 알고 있지만 최근에는 특정 유형의 빈 배열을 반환해야하기 때문에이 방법으로 해결할 수없는 비슷한 문제에 직면했습니다.
나는했다
return [];
유형 []
은 어디에 있었 Criminal[]
습니까?
나도 일 하지 return: Criminal[] [];
않았다 return []: Criminal[];
.
언뜻보기에 반환하기 직전에 유형이 지정된 변수 ( 올바로보고 된 대로) 를 만들어서 해결 했지만 (JavaScript 엔진의 작동 방식을 모르겠습니다) 오버 헤드가 생겨 읽기 어려울 수 있습니다.
철저히하기 위해이 솔루션을 내 대답으로보고합니다.
let temp: Criminal[] = [];
return temp;
결국 TypeScript 유형 캐스팅을 발견하여 문제를보다 간결하고 읽기 쉽고 효율적인 방법으로 해결할 수있었습니다.
return <Criminal[]>[];
이것이 미래 독자들을 도울 것입니다!