반응형
//인터페이스도 제네릭 가능
interface DB<T>{
add(v:T):void
get():T
}
interface JSONSerialier{
serialize():string
}
//클레스도 제네릭 사용가능
//제네릭 구현하면 클라스도 제네릭 선언 필요
class LocalDB<T extends JSONSerialier> implements DB<T>{
constructor(private localStorageKey:string){
}
add(v:T){
localStorage.setItem(this.localStorageKey,v.serialize())
}
get():T{
const v = localStorage.getItem(this.localStorageKey)
return (v) ? JSON.parse(v) : null
}
}
// interface User extends JSONSerialier{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 Cart2<T>{
getItem():T extends Veigtable ? Veigtable : Meat
}
const cart11:Cart2<Veigtable>={
getItem(){
return {
v:''
}
}
}
반응형
'개발 > Typescript' 카테고리의 다른 글
type-alias (0) | 2021.04.16 |
---|---|
intersection/union (0) | 2021.04.16 |
generic (0) | 2021.04.16 |
enum (0) | 2021.04.16 |
class2 (0) | 2021.04.16 |