2016-10-19 6 views
1

TypeScript에는 리터럴 문자열을 일반 함수의 형식 매개 변수로 사용할 수 있다는 편리한 속성이 있습니다. 따라서TypeScript 리터럴 유형 매개 변수가 전달되지 않음

let a:HTMLAnchorElement = document.createElement("a"); 

을 할 수 있으며, 컴파일러는 (때문에 과부하 createElement(tagName:"a"):HTMLAnchorElement의) 올바른 알고있다.

나는 또한 다음과 같은 이해할 수 있도록 스마트 될 것 기대했다 :

function createEl<T extends string>(type:T) { 
    let el = document.createElement(type); 
    // ...stuff... 
    return el; 
} 
let a:HTMLAnchorElement = createEl("a"); 

그러나 불행하게도, 그것은 (는 "하지 할당"오류를 제공)하지 않습니다. 내가 그것을 놓칠 수있는 뭔가가 있습니까, 아니면 다른 접근법을 찾아야합니까? 어떻게됩니까

답변

0

createElementthe last signature를 사용하는 것입니다 : 대한 an open issue을 거기

function fn(s: "one" | "two") { } 
let s = "two"; 
fn(s); // Error: Argument of type 'string' is not assignable to parameter of type '"one" | "two"' 

하는 경우 :

createElement(tagName: string): HTMLElement; 

이 같은 일을 같은 수 있습니다.
열린이 문제의 또 다른 이슈는 Always use literal types입니다. 우아하지 않은

function createEl(type: string) { 
    let el = document.createElement(type); 
    // ...stuff... 
    return el; 
} 

let d = createEl("div") as HTMLDivElement; 
let a = createEl("a") as HTMLAnchorElement; 

,하지만 작동합니다

지금, 당신은이 작업을 수행 할 수 있습니다.