-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
Description
자바스크립트때처럼 아직 이해도가 부족해서 (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; // 오케이예외처리
- 왜 나왔는지 잘 이해못함.. 타입스크립트 문제맞나요?
믹스인
- 두개의 클래스 동시 상속을 지원하지 않기때문에, 믹스인을 이용해서 확장하는 형태로 활용가능
sbyeol3