Typescript의 Array <Type> VS Type []


162

내가 아는 한 속성 유형은 배열 일 때 두 가지 방법으로 정의 할 수 있습니다.

property_name: type

여기서 type은 다음 중 하나 일 수 있습니다.

Array<string>, Array<MyType>, etc. (e.g. let prop1: Array<string>)

과

string[], MyType[], etc. (e.g. let prop1: string[])

두 경우 의 차이점 은 무엇입니까 ? 아니면 내가 잘못 이해하고 있습니까 (아마도 캐스팅에 사용되는 <>에 관한 것입니까?)

질문이 중복으로 표시되어 있기 때문에 수정 , 나는 any []에 대한 다른 질문이 있음을 알고 있지만 여전히 게시하기 전에 그것을 보았고 나에게 다른 [] VS < > 물었다



1
그것들은 실질적으로 동일한 구조이며, 런타임에 사실상 동일한 객체입니다. Reflect-metadata 는 Array객체를 생성자로 사용하는 것으로 간주합니다 . 위의 답변을 참조하십시오.
— John Weisz

3
그 질문이 오래되었다는 @NitzanTomer는 당시에는 Array<T>존재하지 않았습니다.
— Nathan Shively-Sanders

이 질문에 "사이의 차이점에 대해 감소 될 수 있기 때문에 NathanShively - 샌더스 @ 답은 또는 제네릭없이 동일 let x: Array;에 let x: any[];"
— Nitzan 토 메르

답변:


168

의미 상 차이가 없습니다

전혀 차이가 없습니다. Type[]는 IS 속기 구문 의 배열 Type. Array<Type>는 IS 일반 구문은 . 그것들은 완전히 같습니다.

핸드북은 여기에 예를 제공 합니다 . 쓰기와 동일합니다.

function loggingIdentity<T>(arg: T[]): T[] {
    console.log(arg.length);
    return arg;
}

또는:

function loggingIdentity<T>(arg: Array<T>): Array<T> {
    console.log(arg.length);
    return arg;
}

다음은 일부 릴리스 노트 에서 인용 한 것입니다 .

특히, number[]의 축약 버전 인 Array<number>것처럼 Date[]위한 속기이다 Array<Date>.

그러나 속기 구문이 필요한 경우가 있습니다.

TypeScript 3.4부터는 새 유형 수정 자에 차이 가 readonly있습니다. 과연:

readonly유형 수정은 배열 형 및 튜플 타입의 구문을 사용할 수있다

let err2: readonly Array<boolean>; // error!    
let okay: readonly boolean[]; // works fine

그러나 다음 선언은 다음과 같습니다 readonly boolean[].

let okay2: ReadonlyArray<boolean>;

1
@dragonmnl, 그것은 일반적인 유형입니다. 핸드북 의 "Hello World of generics"섹션을 읽으십시오 .
— Paleo

4
공식 권장 사항은 없습니다. 나는 개인적으로 속기 및 속기 ( type[]) 만 사용합니다 . 읽기가 더 쉽기 때문입니다.
— Paleo

2
그들은 더 이상 완전히 동일하지 않습니다 : typescriptlang.org/docs/handbook/release-notes/…
— DShook

1
readonly실제로 필요하지 않은 경우 에 대비 하여 올바르게 설정했다면 긴 표기법을 선호하는 경우 다음과 같이 작성할 수 있습니다.let err2: ReadonlyArray<boolean>;
— n4nn31355

1
@ n4nn31355 그렇게 생각합니다. 이 고지를 추가하기 위해 편집했습니다.
— Paleo

-10
foo: Array

그것은 그것이 배열에 대한 암시 적 any유형을 갖는 일반 배열임을 의미합니다.

foo: string[]

즉, 문자열 배열이라는 것을 의미합니다. 즉, 문자열 이외의 다른 것을 해당 배열로 푸시하려고하면 TypeScript가 정신이 나갑니다.


10
질문은 Array vs string []이 아니라 Array <string> vs string []입니다.
— Juangui Jordán

내가 정의 매개 변수를 사용하는 방법에 숫자의 배열을 통과 할 때 타이프 라이터가 마음을하지 않는 것, 이상한foo: string[]
— jlewkovich

3
숫자 배열 fn ([1,2,3])을 전달하면 문제가되지 않습니다. 변수를 전달했는데 형식이 명시 적이 지 않으면 a = []; a = [1,2,3]; fn (a), a는 any 타입이기 때문에 신경 쓰지 않습니다 []
— Quentin 2
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.