TypeScript에서 “Three of a Crime”이라는 간단한 논리 게임을 만들고 있습니다.
TypeScript에서 유형이 지정된 배열을 미리 할당하려고 할 때 다음과 같이하려고했습니다.
var arr = Criminal[];
“식 용어의 형식 확인”오류가 발생했습니다.
또한 이것을 시도
var arr : Criminal = [];
이로 인해 “[범죄 형”으로 변환 할 수 없습니다.
이를 수행하는 ‘TypeScript’방법은 무엇입니까?
답변
기존 답변에 옵션이 누락되었으므로 다음은 전체 목록입니다.
// 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에서는 측정 가능한 차이가 없었습니다.
답변
TypeScript에서 형식화 된 배열을 올바르게 사전 할당하는 문제는 배열 리터럴 구문으로 인해 다소 가려져 처음 생각했던 것처럼 직관적이지 않았습니다.
올바른 방법은
var arr : Criminal[] = [];
그러면 변수 ‘arr’에 저장된 올바른 형식의 빈 배열이 나타납니다.
이것이 다른 사람들을 돕기를 바랍니다!
답변
나는 이것이 오래된 질문이라는 것을 알고 있지만 최근에는 특정 유형의 빈 배열을 반환해야하기 때문에이 방법으로 해결할 수없는 비슷한 문제에 직면했습니다.
나는했다
return [];
유형 []
은 어디에 있었 Criminal[]
습니까?
나도 일 하지 return: Criminal[] [];
않았다 return []: Criminal[];
.
언뜻보기에 반환하기 직전에 유형이 지정된 변수 ( 올바로보고 된 대로) 를 만들어서 해결 했지만 (JavaScript 엔진의 작동 방식을 모르겠습니다) 오버 헤드가 생겨 읽기 어려울 수 있습니다.
철저히하기 위해이 솔루션을 내 대답으로보고합니다.
let temp: Criminal[] = [];
return temp;
결국 TypeScript 유형 캐스팅을 발견하여 문제를보다 간결하고 읽기 쉽고 효율적인 방법으로 해결할 수있었습니다.
return <Criminal[]>[];
이것이 미래 독자들을 도울 것입니다!
답변
아래와 같이 공개적으로 액세스하려면 :
public arr: Criminal[] = [];