For Javascript Programmers part.2

이대현·2023년 5월 26일
0

Typescript

목록 보기
3/6

For Javascript Programmers part.2

3.타입 구성
Union, Generic: 여러가지 타입을 이용하여 새 타입을 작성하기 위해 일상적인 코드에서 가장 많이 사용됨

유니언: 타입이 여러 타입중 하나일 수 있음을 선언하는 방법
Ex)

type LockStates = "locked" | "unlocked";
type OddNumbersUnderTen = 1 | 3 | 5 | 7 | 9;
function getLength(obj: string | string[]) {
	if (typeof obj === "string") {
    	return [obj];
	  } else {
	    return obj;
  	}
}코드를 입력하세요

제네릭: 타입에 변수를 제공하는 방법

Ex)

type StringArray = Array<string>;
type NumberArray = Array<number>;
type ObjectWithNameArray = Array<{ name: string }>;

제네릭으로 고유타입 선언하는법

interface Backpack<Type> {
  add: (obj: Type) => void;
  get: () => Type;
}

declare const backpack: Backpack<string>;


const object = backpack.get();

backpack.add(23);

4.구조적 타입 시스템
타입스크립트 핵심 중 하나는 타입 검사가 값이 있는 ‘형태’에 집중한다는 것임 -> 구조적 타이핑
구조적 타입 시스템에서 두 객체가 같은 형태를 가지면 같은 것으로 간주됨

Ex)

interface Point {
  x: number;
  y: number;
}

function printPoint(p: Point) {
  console.log(`${p.x}, ${p.y}`);
}

// "12, 26"를 출력합니다
const point = { x: 12, y: 26 };
printPoint(point);

point변수는 Point타입으로 선언된 적이 없지만, TypeScript는 타입 검사에서 point의 형태와 Point의 형태를 비교합니다. 둘 다 같은 형태이기 때문에, 통과합니다.
형태 일치에는 일치시킬 객체의 필드의 하위 집합만 필요합니다.

const point3 = { x: 12, y: 26, z: 89 };
printPoint(point3); // prints "12, 26"

구조적으로 클래스와 객체가 형태를 따르는 방법에는 차이가 없습니다

class VirtualPoint {
  x: number;
  y: number;

  constructor(x: number, y: number) {
    this.x = x;
    this.y = y;
  }
}

const newVPoint = new VirtualPoint(13, 56);
printPoint(newVPoint); // prints "13, 56"
profile
Frontend Developer

0개의 댓글