Frontend practice/TypeScript

TS(타입 연습해보기)

판다꼬마 2022. 9. 16. 14:08
728x90

 

타입 추론하기

interface Arr<T> {
  forEach(callback: (item: T) => void): void;
}

const a: Arr<number> = [1, 2, 3];
a.forEach((item) => {
  console.log(item);
  item.toFixed(1);
});

a.forEach((item) => {
  console.log(item);
  return "3";
});

const b: Arr<string> = ["1", "2", "3"];

b.forEach((item) => {
  console.log(item);
  item.charAt(3);
});

b.forEach((item) => {
  console.log(item);
  return "3";
});

 

 

타입 직접 하나씩 만들어보기

interface Arr<T> {
  forEach(callback: (item: T) => void): void;
  map(callback: (v) => void): void;
}

const a: Arr<number> = [1, 2, 3];
const b = a.map((v) => v + 1);

이것을 오류 안나게 변경하면 

interface Arr<T> {
  forEach(callback: (item: T) => void): void;
  map(callback: (v: T) => T): T[];
}

const a: Arr<number> = [1, 2, 3];
const b = a.map((v) => v + 1); //[2,3,4]

 

다른 예시

interface Arr<T> {
  forEach(callback: (item: T) => void): void;
  map<S>(callback: (v: T) => S): S[];
}

const a: Arr<number> = [1, 2, 3];
const b = a.map((v) => v + 1); //[2,3,4]
const c = a.map((v) => v.toString());//['2','3','4']; string[]
interface Arr<T> {
  forEach(callback: (item: T) => void): void;
  map<S>(callback: (v: T) => S): S[];
  filter<S extends T>(callback: (v: T) => v is S): S[];
}

const a: Arr<number> = [1, 2, 3];

const b = a.filter((v): v is number => v % 2 === 0); //[2]

const c: Arr<number | string> = [1, "2", 3, "4", 5];
const d = c.filter((v): v is string => typeof v === "string"); //['2','4'] stinrg[]

 

이렇게 예시를 하나씩 작성해보면서 타입을 직접 넣어봐야한다.

 

728x90