// x는 unknown이 가득한 array
function 함수(x : unknown[]){
return x[0]
}
// a는 unknown 타입
let a = 함수([4,2]);
// a기 unknown 이라 에러발생.
console.log(a + 1);
파라미터로 타입을 입력하는 함수
function 함수<T>(x : T[]){
return x[0]
}
// number라는 타입을 파라미터로 넘겨서 박음.
let a = 함수<number>([4,2]);
// string라는 타입을 파라미터로 넘겨서 박음.
let b = 함수<string>(['4','2']);
console.log(a + 1);
// MyType으로 뭐가 들어올줄 알고 - 1 을 하냐 해서 에러
function 함수<MyType>(x : MyType){
return x - 1;
}
// extend는 오른쪽에 있는 number타입 속성인지 아닌지 체크한다. (narrowing)
function 함수<MyType extends number>(x : MyType){
return x - 1;
}
let a = 함수<number>(100);
///
interface LengthCheck {
length : number
}
// number인지 확인
function 함수<MyType extends LengthCheck>(x : MyType){
return x.length
}
function makeLength<T extends string | string[]>(x: T) {
return x.length;
}
const stringLength = makeLength<string>('hello');
const arrayLength = makeLength<string[]>(['kim', 'park']);
interface Animal {
name: string;
age: number;
}
let data = '{"name" : "dog", "age" : 1 }';
function makeToObj<T>(x: string): T {
return JSON.parse(x);
}
const result = makeToObj<Animal>(data);
console.log(result);
class에 적용
class Person<T> {
name;
constructor(a: T) {
this.name = a;
}
}
let a = new Person<string>('어쩌구');
a.name; //any 타입이 되었넹