Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[1주차] 타입스크립트 딥다이브 모르는 내용 정리 #1

Open
hyunahOh opened this issue Aug 13, 2022 · 0 comments
Open
Assignees
Labels

Comments

@hyunahOh
Copy link
Collaborator

hyunahOh commented Aug 13, 2022

자바스크립트때처럼 아직 이해도가 부족해서 (1)용어 익히기, (2)모르겠는 내용 정리를 위주로 해보겠습니다.

파일 선언

declare 라는 키워드르 변수의 타입 선언을 해줌.

인터페이스

  • 새로운 멤버 추가가 쉽다.
  • 클래스에 사용가능

lib.d.ts

자바스크립트 런타임에 쓰는 기본 변수들의 타입 저장해둔 파일
확장 가능하다.

함수

  • 오버로딩해서 쓸 수 있다. (자바스크립트도 가능한지 몰랐네요.. JS에서 안써봄.)

콜러블

  • 인터페이스 내에 () 붙은 멤버
  • 예시
interface ReturnString {
  (): string
}
declare const foo: ReturnString;
const bar = foo(); // bar는 문자열 타입인 것으로 추론됨
  • 뉴어블
interface CallMeWithNewToGetString {
  new(): string
}
// 사용법
declare const Foo: CallMeWithNewToGetString;
const bar = new Foo(); // bar는 string 타입의 변수로 추론됨

타입 표명(==단언 <-> 추론)

  • 이 챕터가 하고싶은 말 잘 이해 못했음..

신선도

  • 이 챕터도 아직 좀 난해..
  • 이 예제가 뭔가 핵심 같은데.. 객체 리터럴일 때 타입 검사가 좀 빡세다?
function logIfHasName(something: { name?: string }) {
    if (something.name) {
        console.log(something.name);
    }
}
var person = { name: 'matt', job: 'being awesome' };
var animal = { name: 'cow', diet: 'vegan, but has milk of own species' };

logIfHasName(person); // 오케이
logIfHasName(animal); // 오케이
logIfHasName({neme: 'I just misspelled name to neme'}); // 오류: 객체 리터럴은 정의된 속성만 지정해야 함. 여기서 `neme`은 불필요.
  • 리터럴인데 추가 속성을 허용하고 싶으면
var x: { foo: number, [x: string]: unknown };
x = { foo: 1, baz: 2 };  // 오케이, `baz`는 인덱스 서명 부분에 해당하게 됨

타입 가드

  • TypeScript는 JavaScript의 instanceof, typeof 연산자를 이해할 수 있습니다.
  • 따라서 타입으로 분기문을 치면 타입에러를 방지할 수 있음

리터럴

  • primitive 한 값도 타입이 될 수 있다.

읽기 전용

  • readonly로 지정하면 불변성을 지원한다.

제네릭

  • 이거 약간 씨언어 할때 나왔던것 같은데 타입을 변수처럼 씀. 예를들어 <

타입 인터페이스

  • 특정 연산 상황에서는 어느정도 추론도 가능함

타입 호환성

  • 변형성 : 자식은 부모의 타입을 가질 수 있다.

Never 타입

  • 리턴하지 않는 함수나 예외를 던져야하는 경우 리턴 never로 선언가능

구별된 유니온

  • 인터페이스들을 합집합해서 하나의 타입으로 쓸 수 있음
  • 겹치는 멤버가 있으면 코드에서 분기처리하면 에러가 안남

인덱스 서명

  • ??

타입 이동하기

  • 값을 이동하면서 타입도 같이 복사해야함
  • 변수같은 경우는 typeof 를 이용해서 복사가능
var foo = 123;
var bar: typeof foo; // `bar`는 `foo`와 같은 타입 (여기서는 `number`)
bar = 456; // 오케이

예외처리

  • 왜 나왔는지 잘 이해못함.. 타입스크립트 문제맞나요?

믹스인

  • 두개의 클래스 동시 상속을 지원하지 않기때문에, 믹스인을 이용해서 확장하는 형태로 활용가능
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants