typescriptd에만 있는 형식들

김수정·2020년 7월 21일
0

Enum

개발자들 간의 커뮤니케이션을 원활하게 해주기 위해서 존재합니다.
매우 밀접하게 관련된 값들을 저장하는 열거형 객체이며 값은 항상 숫자 또는 문자열입니다.

enum MatchResult {
  HomeWin = 'H',
  AwayWin = 'A',
  Draw = 'D',
}

사용은 객체사용하듯이 합니다. MatchResult.HomeWin 처럼요.

type assertion

타입스크립트에게 명확한 타입을 우리가 주입해주는 것.
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();
  }
}

generic

형식이 정해져있지 않고 들어오는 데이터에 따라 달라져야하는 형식일 때, 지정하는 것을 보류해놓고 들어오면 그 형식으로 하겠다는 의미.
해당 아이를 실행할 때 형식을 넘겨주면 됨.

// 정의하는 곳
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],
    ];
  }
}
profile
정리하는 개발자

0개의 댓글