class Person3{
name: string;
age: number;
readonly log: string; //읽기만 가능
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
}
function logText3(text: string | number) {
// input type이 string | number 가 되어서 공통적인 요소만 호출 가능하다
console.log(text);
return text;
}
let a = logText3('hi');
// 호출은 문제 없지만, 위의 a는 string | number 타입을 갖게된다.
function logTextGen<T>(text: T): T{
console.log(text);
return text;
}
const str3 = logTextGen<string>('하이');
str3.split('');
interface Dropdown<T>{
value: T;
selected: boolean;
}
const obj: Dropdown<string> = { value: 'abc', selected: false };
const objNumber: Dropdown<number> = { value: 1200, selected: false };
function logTextLength<T>(text: T[]): T[] {
console.log(text.length);
text.forEach(function (text) {
console.log(text);
})
return text;
}
logTextLength<string>(['hi', 'abc']);
//LengthType에 정의된 속성을 가지고 있으면 수용 가능함
function logTextLength2<T extends LengthType>(text: T): T {
Text.length;
return text;
}
// logTextLength2(10); //10: number는 length 속성이 없기 때문에 오류
logTextLength2({ length: 10 }); // length 속성이 있기 때문에 가능
interface ShoppingItem{
name: string;
price: number;
stock: number;
}
// ShoppingItem에 정의된 name, price, stock key만 인자로 넘길수있음
function getShoppingItemOption<T extends keyof ShoppingItem>(itemOption: T): T {
return itemOption;
}
getShoppingItemOption("price");
interface Developer{
name: string;
skill: string;
}
interface Person{
name: string,
}
let developer: Developer;
let person: Person;
// develper = person; // 불가
person = developer;
let add5 = function (a: number) {
}
let sum5 = function (a: number, b: number) {
// return a + b;
}
// add=sum; // sum 함수가 add 함수보다 크므로 불가
sum5 = add5;
interface Empty<T> {
//
}
let empty1: Empty<string>;
let empty2: Empty<number>;
// 비어있기 때문에 호환됨
empty1 = empty2;
empty2 = empty1;
interface NotEmpty<T>{
data: T;
}
let notEmpty1: NotEmpty<string>;
let notEmpty2: NotEmpty<number>;
// 제네릭으로 변경된 부분이 있기 때문에 불가하다.
// notEmpty1 = notEmpty2;
// notEmpty2 = notEmpty1;
[인프런] 타입스크립트 입문 - 기초부터 실전까지
[공식문서] https://www.typescriptlang.org/docs/
[타입스크립트핸드북] https://joshua1988.github.io/ts/intro.html