배열
let arrayOfnumber: number[];
//배열에 대한 타입 애너테이션은 배열요소타입 다음에 []가 온다
✔️ noUncheckedIndexedAccess
** 주의**
타입 스크립트는 모든 배열 멤버에 대한 접근이 해당 배열의 멤버를 반환한다고 가정한다.
검색된 배열의 멤버가 존재하는지 의도적으로 확인되지 않는다.
const oneToTen = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
console.log(oneToTen[400].toFixed(2));
위 코드에서 oneToTen[400]은 undefined가 아니라 number타입의 값으로 간주된다.
-> 그렇기에 코드를 실행하면 런타임 에러가 발생한다.
이때 사용하는 것이 noUncheckedIndexAccess 이다.
-> 이 옵션을 tsconfig에서 true로 설정하면 인덱스 시그니처에 'undefined'를 포함시킨다.
(해당 index가 undefined 일 수 있음을 체크한다)
❓ 인덱스시그니처
인터페이스의 객체가 임의의 키를 받고, 해당 키 아래의 특정 타입을 반환할 수 있음을 나타낸다.
interface SomeInterface { [key: string]: number }
+키의 타입은 'string', 'number', 'symbol' 또는 템플릿 리터럴 형식이어야 합니다
✔️ 스프레드
타입이 다른 두 배열을 결합하여 새배열을 생성하면???
-> 새 배열은 두 개의 원래 타입 중 어느 하나의 요소인 유니언 타입 배열로 이해된다.
type A = {
name: string,
age: number,
};
type B = {
name: string,
addr: string,
};
const onlyA: A[] = [
{name: 'lim', age: 10},
{name: 'hong', age: 20},
];
const onlyB: B[] = [
{name: 'jang', addr: 'Seoul'},
{name: 'park', addr: 'Busan'},
];
const aOrB = [...onlyA, ...onlyB];
// (A|B)[]
❕❕concat 을 사용하여 배열을 합칠때는 두 배열의 타입이 같아야한다!
튜플
고정된 크기 배열이다. 각 인덱스에 알려진 특정 타입을 갖는다.
배열의 모든 가능한 멤버를 갖는 유니언타입보다 더 구체적이다.
튜플타입을 선언하는 구문은 리터럴처럼 보이지만 요소의 값 대신 타입을 적는다.
const lim = ['Lim', 26];
let limTup: [string, number] = lim;
//Error! Type '(string | number)[]' is not assignable to type '[string, number]'.
const a: [number, string, boolean]
= [1, 'lim', false];
let b: [number, string] = a;
//Error!! Type '[number, string, boolean]' is not assignable to type '[number, string]'.
//Source has 3 element(s) but target allows only 2.
✔️ 튜플추론
- 배열이 초기값으로 사용되는 경우
- 배열이 함수에 대한 반환값으로 사용되는 경우
=> 타입스크립트는 생성된 배열을 튜플이 아닌 가변 길이의 배열로 취급한다.
어떻게 해야 구체적인 튜플 타입임을 나타낼 수 있을까??
- 명시적 (explicit) 튜플타입 : 타입고정 => [string, number]
- const assertion => as const
readonly로 바뀌면서, 값자체가 타입이 된다!!
'Dev > Typescript' 카테고리의 다른 글
| [TS] 타입제한자 (0) | 2025.04.23 |
|---|---|
| [TS] 인터페이스 (0) | 2025.04.22 |
| [TS] 함수타입 (1) | 2025.04.22 |
| [TS] 객체타입 (1) | 2025.04.21 |
| [TS] 유니언과 리터럴 (0) | 2025.04.21 |
