개발자들 간의 커뮤니케이션을 원활하게 해주기 위해서 존재합니다.
매우 밀접하게 관련된 값들을 저장하는 열거형 객체이며 값은 항상 숫자 또는 문자열입니다.
enum MatchResult {
HomeWin = 'H',
AwayWin = 'A',
Draw = 'D',
}
사용은 객체사용하듯이 합니다. MatchResult.HomeWin 처럼요.
타입스크립트에게 명확한 타입을 우리가 주입해주는 것.
as ~
function battle(character: Character) {
if (character.isWizard()) {
(character as Wizard).fireBall(); // Pass
} else if (character.isWarrior()) {
(character as Warrior).attack(); // Pass
} else {
character.runAway();
}
}
형식이 정해져있지 않고 들어오는 데이터에 따라 달라져야하는 형식일 때, 지정하는 것을 보류해놓고 들어오면 그 형식으로 하겠다는 의미.
해당 아이를 실행할 때 형식을 넘겨주면 됨.
// 정의하는 곳
export abstract class CsvFileReader<T> {
data: T[] = [];
constructor(public filename: string) {}
abstract mapRow(row: string[]): T;
read(): void {
this.data = fs
.readFileSync(this.filename, {
encoding: 'utf-8',
})
.split('\n')
.map((row: string): string[] => {
return row.split(',');
})
.map(this.mapRow);
}
}
// 호출하는 곳
export class MatchReader extends CsvFileReader<MatchData> {
mapRow(row: string[]): MatchData {
return [
dateStringToDate(row[0]),
row[1],
row[2],
parseInt(row[3]),
parseInt(row[4]),
row[5] as MatchResult,
row[6],
];
}
}