declare function makeButton(props: { text: string; onClick: () => void }): void;
function addKeyListener(
el: HTMLElement,
fn: (this: HTMLElement, e: KeyboardEvent) => void
) {
el.addEventListener("keydown", (e) => {
fn.call(el, e);
});
}
function double<T extends number | string>(
x: T
): T extends string ? string : number;
위와 같이 조건부 타입을 사용하면 삼항연산자처럼 동작하게 됩니다.
(number | string) extends string ? string : number
-> (number extends string ? string : number ) |
(string extends string ? string : number)
-> number | string
조건부 타입은 다음처럼 동작하게 됩니다.
function double<T extends number | string>(
x: T
): T extends string ? string : number;
function double(x: any) { return x + x; }
const num = double(12); // number
const str = double('x'); // string
// function f(x: string | number): string | number
function f(x: number|string) {
return double(x);
}
<이펙티브 타입스크립트> (댄 밴더캅 지음, 장원호 옮김, 인사이트, 2021)