123123123.JPG

"JavaScript Superset"

기본 타입

인터페이스(interface)

함수

리터럴, 유니온/교차 타입

클래스(Class)

제네릭(Generics)

유틸리티(Utility)


Advanced TypeScript

TypeScript (Template)

타입 시스템

타입 컴파일

interface DB<T> {
	add(v: T): void;
	get(): T;
}

class D<T> implements DB<T> {
	add(v: T): void {
		throw new Error('Method not implemented.');
	}
	get(): T {
		throw new Error('Method not implemented.');
	}
}

interface JSONSerialier {
	serialize(): string;
}

class LocalDB<T estends JSONSerialier> implements DB<T> {

	constructor(private localStorageKey: string) {
	}

	add(v : T) {
		localStorage.setItem(this.localStroageKey, v.serialize());
	}

	get(): T {
		const v = localStorage.getItem(this.localStorageKey);
		return (v) ? JSON.parse(v) : null;
	}
}

// interface User { name: string };

// const userDb = new LocalDB<User>('user');
// userDb.add({ name: 'jay' });
// const userA = userDb.get();
// userA.name;

// 조건부 타입
interface Veigtable {
	v: string;
}
interface Meat {
	m: string;
}
interface Cart<T> {
	getItem(): T extends Veigtable ? Veigtable : Meat;
}
const cart1: Cart<Veigtable> = {
	getItem() {
		return {
			v: ''
		}
	}
}
cart1.getItem();