reusable component를 만드는 것을 generic이라고 하는데, Typescript에서는 Type을 generic하게 사용할 수 있다.
Generic : characteristic of or relating to a class or group of things; not specific.
function identity<Type>(arg: Type): Type {
return arg;
}
let output = identity<string>("myString");
let output = identity("myString"); // 2번째 방식
<T>
형태로 써줌function loggingIdentity<Type>(arg: Type[]): Type[] {
console.log(arg.length);
return arg;
}
function loggingIdentity<Type>(arg: Array<Type>): Array<Type> {
console.log(arg.length);
return arg;
}
[]
를 붙여서 Array형태임을 나타낼 수도 있다.function identity<Type>(arg: Type): Type {
return arg;
}
let myIdentity: <Input>(arg: Input) => Input = identity;
interface Lengthwise {
length: number;
}
function loggingIdentity<Type extends Lengthwise>(arg: Type): Type {
console.log(arg.length);
return arg;
}
// keyof는 typescript에서 제공하는 operator이다.
function getProperty<Type, Key extends keyof Type>(obj: Type, key: Key) {
return obj[key];
}
let x = { a: 1, b: 2, c: 3, d: 4 };
getProperty(x, "a");
getProperty(x, "m"); //error
class GenericNumber<NumType> {
zeroValue: NumType;
add: (x: NumType, y: NumType) => NumType;
}
let myGenericNumber = new GenericNumber<number>();