본문 바로가기

개발/TS

[TS] TS Doc Handbook 1회독 - 1

온라인 TS 실행 환경

https://www.typescriptlang.org/play/?#code/Q

 

프로젝트 내부 TS 사용을 위한 컴파일 설치

 

데이터 타입

기본형 number, string, boolean, null, undefined, bigint, symbol => 그대로 사용된다

객체형 object, array, tuple => {key: type, optionalKey?: type, ...}, Array<type> or type[]

특수형 any, unknown, never

함수 function name(parameter: type): returnType {}

유니언 타입: 기존 타입 기반을 통해 새로운 타입 생성. type | type. 내부 함수(프로퍼티)를 사용할 때는 좁히기(narrowing)를 해야한다.

타입 별칭: type 키워드를 사용해 타입에 이름을 제공.

인터페이스: interface 키워드를 사용해 객체 타입을 만드는 또 다른 방법.

type와 interface는 비슷하지만 확장성에서 차이가 있습니다. (Almost all features of an interface are available in type, the key distinction is that a type cannot be re-opened to add new properties vs an interface which is always extendable.)

interface는 extends와 중복 선언을 통해 확장할 수 있지만, type은 & 연산자를 통해서만 확장할 수 없다. type은 생성된 뒤 달라질 수 없다.

 

선호하는 방식에 따라 사용하는 것은 자유이지만,

공식문서에서 추천하는 방식은 interface를 사용해보고 문제가 있을 경우 type을 사용하는 것을 추천한다.

 

타입 단언(Type Assertion)

개발자가 TS보다 타입을 더 잘 아는 경우에 as 키워드를 사용해 타입을 구체적을 명시할 때 사용한다. 또한 as 키워드 대신 <>(꺾쇠괄호)를 사용할 수 있다.

const myCanvas = document.getElementById("main_canvas") as HTMLCanvasElement;
const myCanvas = <HTMLCanvasElement>document.getElementById("main_canvas");

 

추가적으로 ! 키워드를 사용하여 null 또는 undefined가 아님을 보장해주는 단언을 할 수 있다. 사용 시 주의가 필요한데, ! 연산자는 코드의 런타임 동작은 변화시키지 않기 때문에 실제로 null과 undefined가 아닌 경우에만 사용해야 한다.

function liveDangerously(x?: number | undefined) {
  // 오류 없음
  console.log(x!.toFixed());
}

 

리터럴 타입

리터럴이라는 말처럼 문자열이나 숫자 등 값을 타입으로 만드는 것을 의미합니다. 해당 타입은 다른 값을 허용하지 않습니다. 그렇기에 유니언 타입과 함께 활용합니다.

type Gender = 'male' | 'female';

 

리터럴 추론

리터럴 타입의 경우 객체 프로퍼티에는 적용이 되지 않아 문제가 발생할 수 있습니다.

const req = {method: 'GET', ...};

function handleReq(method: 'GET' | 'POST') {};

handleReq(req.method);
// req 객체의 프로퍼티인 method가 'GET' 타입이 아닌 string 타입이라는 오류가 발생합니다.

// 해결 방법 1
// 두 위치 중 한 곳에 타입 단언을 이용한다

const req = {method: 'GET' as 'GET', ...};

function handleReq(method: 'GET' | 'POST') {};

handleReq(req.method as 'GET');

// 해결 방법 2
// as const 키워드 사용하기
// 키워드를 사용하면 객체의 모든 프로퍼티에 리터럴 타입 값의 대입을 보장을 해줍니다.
const req = {method: 'GET', ...} as const;

function handleReq(method: 'GET' | 'POST') {};

handleReq(req.method);

 

열거형(Enum)

https://www.typescriptlang.org/ko/docs/handbook/enums.html

 

정적 타입 검사

tsc: 타입스크립트를 위한 컴파일러로 다양한 옵션을 통해 사용할 수 있다. 컴파일 설정은 CLI로 실행 시 적용할 수 있고, tsconfig 파일을 사용해 설정할 수 있다.

  --noEmitOnError 옵션: 좀 더 엄격한 동작을 위한 옵션

명시적 타입
자동 타입 추론

- 문맥적 타입 부여

 

다운 레벨링

엄격도

 - strict

 - noImplicitAny: any로 추론되는 변수에 대해 모든 에러. any 타입은 오류를 발생시킬 확률이 높기 때문에 사용하면 더욱 좋다.

 - strictNullCheck: null, undefined에 대한 처리

 

참고

 

무료 사이트 모음 2021, 자라는 것을 잘하는 개발, 2025.02.06

https://www.typescriptlang.org/ko/docs/handbook/typescript-from-scratch.html, 2025.02.06

https://opentutorials.org/course/5080, 생활코딩, 2025.02.06

'개발 > TS' 카테고리의 다른 글

[TS] TS Doc Handbook 1회독 - 6  (0) 2025.06.16
[TS] TS Doc Handbook 1회독 - 5  (1) 2025.06.13
[TS] TS Doc Handbook 1회독 - 4  (0) 2025.03.04
[TS] TS Doc Handbook 1회독 - 3  (0) 2025.02.28
[TS] TS Doc Handbook 1회독 - 2  (0) 2025.02.26