"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();