TypeScript - 함수 타입
- never 반환 타입
- never 반환 함수는 의도적으로 항상 오류를 발생시키거나 무한 루프를 실행하는 함수
- ex)
function fail(message : string) : **never** { throw new Error(`Invariant Failure : ${message}`); }
- never 반환 함수는 의도적으로 항상 오류를 발생시키거나 무한 루프를 실행하는 함수
- 함수 오버로드 (function overloading)
- 동일한 이름의 매개 변수만 다른 여러 버전의 함수를 만드는 것
- this
- this의 타입을 정할 때 함수의 첫번째 매개변수 자리에 this를 쓰고 타입을 입력한다.
- ex) function 함수명(this: 타입) { …}
- 하지만 실제로 인자값을 받는 매개변수는 this: 타입을 제외한 나머지이므로 헷갈리면 안된다.
- this의 타입을 정할 때 함수의 첫번째 매개변수 자리에 this를 쓰고 타입을 입력한다.
TypeScript - 배열과 튜플
- 배열
- let 배열이름: 데이터타입[]; 의 형태
- 배열과 함수 타입
- string 배열을 반환하는 함수
- let getNames: () => string[];
- string을 반환하는 함수 배열
- let nameGetters: (() => string)[];
- string 배열을 반환하는 함수
- 유니언 타입 배열
- string 또는 number 배열
- let stringOrArrayOfNumber: string | number[];
- string 또는 number를 요소로 갖는 배열
- let ArrayOfStringOrNumber: (string | number)[];
- string 또는 number 배열
- noUncheckedIndexedAccess
- 이 옵션을 true로 설정하면 인덱스 시그니처에 undefined를 포함시킨다.
- 인덱스 시그니처는 인터페이스 객체가 임의의 키를 받고 해당 키 아래의 특정 타입을 반환할 수 있음을 나타낸다.
- 배열의 length를 벗어난 인덱스에 접근하는 것은 방지할 수 있지만 해당 인덱스에 값이 존재하는지 확인하는 것은 아니다.
- 이 옵션을 true로 설정하면 인덱스 시그니처에 undefined를 포함시킨다.
- 스프레드 (Spread and Rest Operations)
- concat을 이용한 결합
- concat은 결합하려는 두 배열의 타입이 같아야 한다. (서로 타입 다른 두 배열 결합하려면 spread 사용)
- const 결합 = 배열1.concat(배열2); 형태
- spread를 이용한 결합
- 서로 타입이 다른 두 배열을 결합할 때 사용
- 결합한 새로운 배열의 타입은 두 배열의 타입 중 어느 하나의 요소인 유니언 타입 배열로 된다.
- const 결합 = […배열1, …배열2]; 형태
- concat을 이용한 결합
- 튜플 (tuple)
- 고정된 크기의 배열이며 서로 다른 타입의 요소를 갖는다.
- 각 인덱스에 알려진 특정 타입을 갖는다.
- 튜플 선언
- let 튜플: [string, number, boolean]; 과 같은 데이터 타입을 배열 안에 넣어서
- 튜플 값 할당
- 튜플 = [”Kim”, 20, true]; 같은 형식으로 해당 데이터 타입 위치에 값 할당
- 튜플 추론
- TS는 생성된 배열을 가변 배열로 취급
- 배열이 초기값으로 사용되는 경우
- 배열이 함수에 대한 반환값으로 사용는 경우
- 명시적 튜플 타입
- 타입 애너테이션을 사용해 변수의 타입을 튜플 타입으로 지정
- 함수가 튜플 타입을 반환하겠다고 선언한 후 배열 리터럴 반환
- const getNameAgeTuple = (): [string, number] => { // do something... return ['Lim', 20]; }
- const 어서션 읽기 전용 튜플
- const 어서션은 TS에 타입을 유추할 때 읽기 전용이 가능한 값 형식 사용하도록 지시
- const dogInfo = ['Jama', 3] **as const**; //tuple + readonly // readonly ["Jama", 3]
- TS는 생성된 배열을 가변 배열로 취급
- const assertion
- primitive 타입의 값 뒤에 as const 연산자가 붙으면 값 자체가 타입이 된다. (readonly)
- let a = 'a' as const; // a의 타입 → 'a' let b10 = 10 as const; // b10의 타입 -> 10
- object 타입의 값 뒤에 as const 연산자가 붙으면 readonly… 타입이 된다.
- let cObj = {name: 'Lim', age: 26} as const; // cObj의 타입 -> readonly {name: 'Lim', age: 26} let dArr = ['hello', 'lim', 26, true] as const; // dArr의 타입 -> readonly ['hello', 'lim', 26, true]
TypeScript - 인터페이스
- 속성 타입
- 선택적 속성
- ? 물음표
interface Book { author**?**: string; pages: number; }
- 읽기 전용 속성
- readonly
interface Page { **readonly** text: string; }
- 선택적 속성
- 호출 시그니처 (call signature)
- 함수를 호출하는 방법에 대한 타입 시스템 설명
- 매개변수의 목록과 반환 타입을 포함한다.
- 인덱스 시그니처 (index signature)
- 임의의 key를 받고 해당 key에 대한 value의 타입 지정
- 인덱스 시그니처를 사용하여 프로퍼티의 존재 유무를 알 수 없다.
- 중첩 인터페이스 (Nested Interface)
- 속성의 타입이 다른 인터페이스나 객체 타입을 가질 수 있다.
- interface 확장(extends)
- interface B extends A { … }
- interface 다중 상속(확장)
- 프로퍼티는 동일한 타입이어야 한다.
- interface C extends A, B { …}
- interface 병합(merge) 활용
- 동일 프로퍼티 이름을 가질 경우 같은 타입이어야 한다.
- interface A {id: number;}
- interface A {name: string;}
- let a: A = {id: 1, name: ‘Hong’};
- 동일 프로퍼티 이름을 가질 경우 같은 타입이어야 한다.
'교육 (Today I Learned) > Hanaro' 카테고리의 다른 글
[Hanaro] 22일차 / TypeScript (선언 파일과 구성 및 옵션, 타입 운영, 유틸리티 타입) (0) | 2024.02.15 |
---|---|
[Hanaro] 20일차 / TypeScript (class, 타입 제한자, Generic) (0) | 2024.02.15 |
[Hanaro] 18일차 / TypeScript (Type System, Union&Literal, Object, function) (0) | 2024.02.08 |
[Hanaro] 17일차 / JavaScript (DOM) (0) | 2024.02.07 |
[Hanaro] 16일차 / JavaScript (Module, 비동기 프로그래밍) (0) | 2024.02.06 |