union
function sayAndReturnNumberOrString(phrase: number | string) {
console.log(`Hey, ${phrase}`);
return phrase;
}
intersection
interface IDBConfig {
host: string;
port: number;
user: string;
password: string;
schema?: string;
}
interface ExtraConfig {
encrypt: boolean;
dbName: string;
}
function printDBConfig(config: IDBConfig & ExtraConfig) {
console.log(config);
}
type
type ID = string | number;
type Input = string;
type Point = {
x: number;
y: number;
}
- 타입을 정의
- interface와 유사하나 확장성이 고려되지 않았다는 것에 interface와의 차이점이 있다.
literal
type Weather =
| "Sunny"
| "Cloudy"
| "Rainy"
| "Windy"
| "Snowy"
| "Typhoon"
| "Hurricane";
const dateToWeather: Record<number, Weather> = {
1: "Sunny",
2: "Cloudy",
3: "Rainy",
4: "Windy",
5: "Snowy",
6: "Typhoon",
7: "Hurricane",
};
function getWeather(date: number): Weather {
return dateToWeather[date];
}
- 값을 타입으로 쓰는 것
- 아래의 return값이 dateToweather의 값만 가지게 됨.
enum
- 고정된 값을 정의하기 위해 사용
- 객체처럼 key를 가진게 아닌 '값이 할당된 상수(constance)'로서 활용됨.
enum Day {
SUN = "sunday",
MON = "monday",
TUE = "tuesday",
WED = "wednesday",
THU = "thursday",
FRI = "friday",
SAT = "saturday",
}
function sayDays() {
console.log(`Today is: ${Day.SUN}}`);
}
let Sun: Day = Day.SUN;
let Sun: Day = Day[0];
enum Day{SUN=1,MON=2...SAT=7}
let Sat:String = Day[7];
enum Day{SUN=3,MON,TUE...SAT}
let TUE:String = Day[5];
Any
let str: any ='hi';
let num: any = 10;
- 모든 타입 저장 가능
- 컴파일 중에 타입 검사를 하지 않음
void
let unknown:void = undefined;
function sayHi():void{
console.log('hi');
}
- 보통 함수에서 반환 값이 없을 때 any의 반대 타입
- 변수에는 undefined와 null만 할당하고, 함수에는 반환 값을 설정할 수 없는 타입
Generic
interface C<T> {
x:T;
y;T;
}
const c : C<number> ={
x:1;
y:2;
}
- 객체의 구조는 정했지만 key의 type을 미리 정하지 않을 때 사용
- 재사용성이 뛰어나다.