programing

TypeScript에서 여러 유형의 어레이 정의

stoneblock 2023. 3. 20. 21:22

TypeScript에서 여러 유형의 어레이 정의

다음과 같은 양식이 있습니다.[ 1, "message" ].

TypeScript에서는 어떻게 정의합니까?

TypeScript에서 여러 유형의 어레이 정의

유니언 타입 사용(string|number)[]데모:

const foo: (string|number)[] = [ 1, "message" ];

[1, "message" (메시지)]폼 배열이 있어요

항상 두 가지 요소만 존재한다고 확신하는 경우[number, string]다음으로 태플이라고 선언할 수 있습니다.

const foo: [number, string] = [ 1, "message" ];

그리고 당신은 태플 멤버의 의미 있는 이름을 제공할 수 있습니다.id그리고.text:

const foo: [id: number, text: string] = [ 1, "message" ];

튜플로서 취급하는 경우(언어 사양 섹션 3.3.3 참조), 다음과 같이 합니다.

var t:[number, string] = [1, "message"]

또는

interface NumberStringTuple extends Array<string|number>{0:number; 1:string}
var t:NumberStringTuple = [1, "message"];

TS의 보풀이 다른 솔루션에 대해 불만을 제기하고 있었기 때문에, 다음과 같은 방법으로 대응할 수 있었습니다.

item: Array<Type1 | Type2>

타입이 1개뿐인 경우는, 다음의 것을 사용해도 괜찮습니다.

item: Type1[]

TypeScript 3.9+ 업데이트(2020년 5월 12일)

이제 TypeScript는 명명된 튜플도 지원합니다.이것에 의해, 코드의 이해성유지보수가 큰폭으로 향상됩니다.공식 TS 놀이터를 확인합니다.


이제 이름 없는 대신

const a: [number, string] = [ 1, "message" ];

이름을 추가할 수 있습니다.

const b: [id: number, message: string] = [ 1, "message" ];

참고: 모든 이름을 한 번에 추가해야 합니다. 일부 이름은 생략할 수 없습니다. 예를 들어 다음과 같습니다.

type tIncorrect = [id: number, string]; // INCORRECT, 2nd element has no name, compile-time error.
type tCorrect = [id: number, msg: string]; // CORRECT, all have a names.

힌트: 마지막 요소의 수를 알 수 없는 경우 다음과 같이 쓸 수 있습니다.

type t = [msg: string, ...indexes: number];// means first element is a message and there are unknown number of indexes.

TypeScript 4.x+ Variadic 태플 타입

마지막 예는 TS 4.x의 경우 다음과 같이 변경해야 합니다.

type t = [msg: string, ...indexes: number[]];// means first element is a message and there are unknown number of indexes.

종류number로 변경되었습니다.number[].

자세한 내용은 이쪽:https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-0.html#variadic-tuple-types

여러 종류의 아이템을 가질 수 있는 배열의 타이핑 포맷은 다음과 같습니다.

Array<ItemType1 | ItemType2 | ItemType3>

이 기능은 테스트 및 타입 가드에 적합합니다.https://www.typescriptlang.org/docs/handbook/advanced-types.html#type-guards-and-differentiating-types

이 형식은 테스트 또는 유형 가드에서는 잘 작동하지 않습니다.

(ItemType1 | ItemType2 | ItemType3)[]

이 버전을 사용하고 있습니다.

exampleArr: Array<{ id: number, msg: string}> = [
   { id: 1, msg: 'message'},
   { id: 2, msg: 'message2'}
 ]

다른 제안과 조금 비슷하지만 여전히 쉽고 기억하기 좋습니다.

숫자 또는 문자열 배열을 가져오려면 다음 중 하나의 배열을 사용하는 유형을 정의할 수 있습니다.

type Tuple = Array<number | string>
const example: Tuple = [1, "message"]
const example2: Tuple = ["message", 1]

특정 순서(숫자와 문자열 등)의 배열을 필요로 하는 경우

type Tuple = [number, string]
const example: Tuple = [1, "message"]
const example2: Tuple = ["messsage", 1] // Type 'string' is not assignable to type 'number'.
const myarray:(TypeA | TypeB)[];

또는 다른 유형을 추가해야 할 경우 여러 위치에서 변경되는 것을 방지하고 유형을 만듭니다.

type MyMixedType = TypeA | TypeB;
const myarray: MyMixedType[];

오브젝트에 여러 개의 값 유형을 가진 배열을 다룰 경우 이 방법이 효과적이었습니다.

 { [key: string]: number | string }[]
[ 1, "message" ] as const ;

"as const"를 실행하면 다음과 같이 입력합니다.

type const = readonly [1, "message"]

컴퓨터가 가능한 정확한 유형 추론 때문에 좋다.

언급URL : https://stackoverflow.com/questions/29382389/defining-array-with-multiple-types-in-typescript