TypeScript 기본 (2)

LOOPY·2021년 8월 17일
post-thumbnail

1. Structural vs. Nominal Type System

  • Structural Type System: 구조가 같으면 같은 타입 -> TypeScript
  • Nominal Type System: 구조가 같아도 이름이 다르면 다른 타입 -> C, Java
    +) duck typing: 만약 어떤 새가 오리처럼 걷고 헤엄치고 꽥꽥 소리내면 나는 걔를 오리라고 부를거야 -> Python

2. 타입 호환성(Type Compatibility)

  • 슈퍼타입에 서브타입 할당 가능 but 서브타입에 슈퍼타입 할당 불가능
    ex)
subsuper
1number
number[]object
[number,number]number[]
nevernumber
  • 예외: number와 any는 양쪽 가능
  • 공변: 같거나 서브타입인 경우 할당 가능
    반병: 함수의 매개변수 타입만 같거나 슈퍼타입인경우 할당 가능
  • strictFunctionTypes옵션: 함수 할당 시 매개변수 타입이 같거나 슈퍼타입인 경우가 아니면 에러로 경고

3. 타입 별칭(Type Alias)

  • Interface와 비슷
    -> 타입의 목적이나 존재가치가 명확하면 interface / 그냥 지칭 또는 별명의 의미이면 alias 사용
  • Primitive, Union Type, Tuple, Function을 다른 이름으로 지정
type MyStringType = string;
let myStr: MystringType = "hello";

type StringOrNumber = string | number;
type PersonTuple = [string, number];
type EatType = (food: string) => void;

+) 추가로 학습한 옵션

  • noImplicitAny옵션: 타입을 명시적으로 지정하지 않은 경우 타입스크립트가 추론 중 any라고 판단하게 되면 컴파일 에러 발생시켜 명시적 지정을 유도 -> any 쓸거면 제대로 적어!
  • strictNullChecks옵션: 모든 타입에 자동으로 포함되어 있는 null과 undefined 제거
  • noImplicitReturns옵션: 함수 내에서 모든 코드가 값을 리턴하지 않으면 컴파일 에러 발생

+) object가 매개변수인 경우

  • function func(a: {name: string; age: number}): string { ..
profile
2년차 프론트엔드 개발자의 소소한 기록을 담습니다 :-)

0개의 댓글