noImpicitAny 옵션을 키면 타입을 명시적으로 지정하지 않은 경우, 타입스크립트가 추론 중 'any'라고 판단하게 되면 컴파일 에러를 발생시켜 명시적으로 지정하도록 유도한다.
strictNullChecks 옵션을 키면 모든 타입에 자동으로 포함되어 있는 'null'과 'undefined'를 제거해준다.
noImplicitReturns 옵션을 키면 함수 내에서 모든 코드가 값을 리턴하지 않으면 컴파일 에러를 발생시킨다.
구조가 같으면, 같은 타입이다.
=> 타입스크립트
구조가 같아도 이름이 다르면, 다른 타입이다.
=> C언어, 자바
=> 타입스크립트에서 의도적으로 Nominal Type System처럼 사용하는 방법
만약 어떤 새가 오리처럼 걷고, 헤엄치고, 꽥꽥거리는 소리를 낸다면 나는 그 새를 오리라고 부를 것이다.
런타임에 발생
=> 파이썬
- 같거나 서브 타입인 경우, 할당 가능 => 공변
- 함수의 매개변수 타입만 같거나 슈퍼타입인 경우, 할당 가능 => 반변
strictFunctionTypes 옵션을 키면 함수를 할당할 시에 함수의 매개변수 타입이 같거나 슈퍼타입이 아닌 경우, 에러를 통해 경고한다.
하,,, 너무 어렵다,,,
- interface랑 비슷해 보임
- Primitive, Union Type, Tuple, Function
- 기타 직접 작성해야하는 타입을 다른 이름을 지정할 수 있음
- 만들어진 타입의 refer로 사용하는 것이지 타입을 만드는 것은 아님
type MyStringType = string;
const str = 'hi';
let myStr: MyStringType = 'hello';
myStr = str;
=> 별 의미가 없다,,,,
let person: string | number = 0;
person = 'dongdu';
type StringOrNumber = string | number;
let another: StrongOrNumber = 0;
another = 'dd';
let person: [string, number] = ['hi', 23]
type PersonTuple = [string, number];
let another: PersonTuple = ['bye', 22];
type EatType = (food: string) => void;