메서드 매개변수의 구체적인 타입을 기재하기 않고 다양한 타입을 처리할 수 있는 기술이며 함수,인터페이스,클래스의 재사용성을 높일 수 있다
function Def<T>(x:T[]) : T {
return x[0];
}
let a = Def<number>([4,2])
let b = Def<stirng>(['kim', 'choi'])
function Def<T extends number>(x:T) : number {
return x - 1
}
let a = Def<number>(100)
interface lengthCheck {
length : number
}
function Def<MyType extends lengthCheck>(x: MyType) {
return x.length
}
let a = Def<string>('hello') //가능
let a = Def<number>(1234) //에러남