*타입이 정해지지 않았을 때 타입을 변수처럼 전달 할 수 있다.








*generic을 포함하는 함수나 클래스를 부르는 두가지 방법


1
2
3
4
5
6
7
8
function test<T>(test: T): T{
    alert(test);
    return test;
}
 
//string인 'haha'의 형태를 자동 추론하여, <T>=<string>으로 인식한다.
test('haha');

//generic을 명시적으로 전달해준다.
test<string>('haha');
 
cs

 












































*string literal type : 스트링 리터럴타입이란, 스트링타입의 서브타입의 일종으로 스트링타입에 제약을 하나 더붙여서 특정 문자열만 허가 하도록 하는 형태로 컴파일시 타입체크의 타겟이 된다. string타입의 서브타입이므로 string이 가진 함수에 접근할 수 있다.

 이와같은 성질은 number literal type에서도 마찬가지이다.


//string literal typeconst eventName1: "click" = "click"; // OK
const eventName2: "click" = null; // OK
const eventName3: "click" = undefined; // OK

// Error: Type '"mouseover"' is not assignable to type '"click"'.
const eventName4: "click" = "mouseover";

// Error: Type '""' is not assignable to type '"click"'.
const eventName5: "click" = "";const eventName5: "click"|"mouseover"; = "click";
//number literal typeconst eventNum1: 3 = 3; // OK const eventNum2: 3 = null; // OK const eventNum3: 3 = undefined; // OK // Error: Type '5' is not assignable to type '3'. const eventNum4: 3 = 5; // Error: Type '""' is not assignable to type '"click"'. const eventNum5: 3 = "";




*keyof 는 인터페이스나 클래스가 지닌 key를 스트링 리터럴 타입의 유니온으로 만들어준다.


interface Person {
    name: string;
    age: number;
    location: string;
}

type K1 = keyof Person; // "name" | "age" | "location"
type K2 = keyof Person[];  // "length" | "push" | "pop" | "concat" | ...
type K3 = keyof { [x: string]: Person };  // string


































'frameworks > typescript' 카테고리의 다른 글

[typescript]decorator  (0) 2018.12.11
[typescript]iterator  (0) 2018.12.11
[typescript]class  (0) 2018.12.07
[typescript]interface  (0) 2018.12.06
[typescript]type assertion  (0) 2018.12.06

+ Recent posts