TypeScript : 빈 타입의 컨테이너 배열 만들기


185

TypeScript에서 "Three of a Crime"이라는 간단한 논리 게임을 만들고 있습니다.

TypeScript에서 유형이 지정된 배열을 미리 할당하려고 할 때 다음과 같이하려고했습니다.

var arr = Criminal[];

"식 용어의 형식 확인"오류가 발생했습니다.

또한 이것을 시도

var arr : Criminal = [];

이로 인해 "[범죄 형"으로 변환 할 수 없습니다.

이를 수행하는 'TypeScript'방법은 무엇입니까?

답변:


169

기존 답변에 옵션이 누락되었으므로 다음은 전체 목록입니다.

// 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>();
  1. 변수 선언에 대한 형식 유추가 실패 할 때마다 형식을 명시 적으로 지정하는 것이 일반적인 솔루션입니다.

  2. 타입 어설 션 (캐스트라고도하지만 타입 스크립트에서는 실제로 캐스팅 된 것이 아님) 을 사용하는 이점은 모든 표현식에서 작동하므로 변수가 선언되지 않은 경우에도 사용할 수 있습니다. 형식 어설 션에는 두 가지 구문이 있지만, 신경 쓰이는 경우에는 후자 만 JSX와 함께 작동합니다.

  3. Array 생성자를 사용하면이 특정 사용 사례에서만 도움이되지만 개인적으로 가장 읽기 쉬운 것을 찾으십시오. 그러나 런타임 * 에는 약간의 성능 영향이 있습니다. 또한 누군가 누군가 Array 생성자를 재정의하기에 충분히 미쳤다면 의미가 바뀔 수 있습니다 .

개인적인 취향의 문제이지만 세 번째 옵션이 가장 읽기 쉽습니다. 대부분의 경우 언급 된 단점은 무시할 수 있고 가독성이 가장 중요한 요소입니다.

*: 재미있는 사실; 글을 쓰는 시점에서 Chrome에서는 성능 차이가 60 % 였지만 Firefox에서는 측정 가능한 차이가 없었습니다.


60 % ?? : O 그의 야생
최대 코플란

239

TypeScript에서 형식화 된 배열을 올바르게 사전 할당하는 문제는 배열 리터럴 구문으로 인해 다소 가려져 처음 생각했던 것처럼 직관적이지 않았습니다.

올바른 방법은

var arr : Criminal[] = [];

그러면 변수 'arr'에 저장된 올바른 형식의 빈 배열이 나타납니다.

이것이 다른 사람들을 돕기를 바랍니다!


20

나는 이것이 오래된 질문이라는 것을 알고 있지만 최근에는 특정 유형의 빈 배열을 반환해야하기 때문에이 방법으로 해결할 수없는 비슷한 문제에 직면했습니다.

나는했다

return [];

유형 []은 어디에 있었 Criminal[]습니까?

나도 일 하지 return: Criminal[] [];않았다 return []: Criminal[];.

언뜻보기에 반환하기 직전에 유형이 지정된 변수 ( 올바로보고 된 대로) 만들어서 해결 했지만 (JavaScript 엔진의 작동 방식을 모르겠습니다) 오버 헤드가 생겨 읽기 어려울 수 있습니다.

철저히하기 위해이 솔루션을 내 대답으로보고합니다.

let temp: Criminal[] = [];
return temp;

결국 TypeScript 유형 캐스팅을 발견하여 문제를보다 간결하고 읽기 쉽고 효율적인 방법으로 해결할 수있었습니다.

return <Criminal[]>[];

이것이 미래 독자들을 도울 것입니다!


1

아래와 같이 공개적으로 액세스하려면 :

public arr: Criminal[] = [];
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.