2016-08-28 2 views
0

typescript로 실험 중이며 기본적으로 IIFE이지만 마지막으로 인수 대신 인수를 사용하여 using(...) 함수를 만들려고합니다.TypeScript에서 함수의 암시 적 타이핑을 얻는 방법은 무엇입니까?

var someValue = (function (p0, p1) { 
    // p0 is someGlobal 
    // p1 is someOtherGlobal 

    // do stuff with in scope 

    return /*something*/; 
}(someGlobal, someOtherGlobal)); 

위의 값은 반환 값이있는 일반적인 IIFE입니다. 다시 말하지만, 저는 여기서 실험하고 있습니다 만, IIFE의 주장이 먼저 나오면 더 쉽게 읽을 수있을 것이라고 생각합니다.

const someValue = using([someGlobal, someOtherGlobal], /*as*/ (p0, p1) => { 
    // p0 is someGlobal p1 is someOtherGlobal 
    // do stuff 
    return /*something*/; 
}); 

그리고이 using(...) 기능을 쓰기 위해 열심히하지 않는 것하지만 지금은 문제가 VS 코드 내 인텔리이 기능을 입력하는 데 문제가 있습니다.

이것은 내가 지금까지 가지고 올 한 것입니다 :

function using<A, B, C, D, E, F>(
    params: A | [A, B] | [A, B, C] | [A, B, C, D] | [A, B, C, D, E, F], 
    func: (p0: A, p1: B, p2: C, p3: D, p4: E, p5: F) => any 
) { 
    return func(
     params[0], 
     params[1], 
     params[2], 
     params[3], 
     params[4], 
     params[5] 
    ); 
} 

이 기능을 제대로 유형 func의 파라미터를하지만 그것을하지 않는 것은 반환 값을 입력입니다. 이 예에서는 그래서 :

const someValue = 42; 
const someNum = using(someValue, num => num + 1); 

num이 제대로 number하지만 someNum A와 입력 된 any에 입력됩니다.

func의 반환 유형을 => any에 입력했기 때문일 수 있습니다.

가 어떻게 someNum의 유형을 알고 코드를 대합니까 :

그래서 여기에 질문입니까?

typescript playground

답변

1

나는 미래에 누군가가 읽고이 코드는 다음 그는 치료를 위해에서의 이해하는 데 필요한 경우이 코드는, 내 의견에 매우 직관적이라고 말함으로써 시작하고 싶어.

당신이 묻는 것에 대한 해결책은 매우 간단합니다. 대답은 단지 다음과 같습니다. 함수의 반환 유형에 다른 일반 유형을 추가하십시오. :

function using<A, B, C, D, E, F, Return>(
    params: A | [A, B] | [A, B, C] | [A, B, C, D] | [A, B, C, D, E, F], 
    func: (p0: A, p1: B, p2: C, p3: D, p4: E, p5: F) => Return 
): Return { 
    return func(
     params[0], 
     params[1], 
     params[2], 
     params[3], 
     params[4], 
     params[5] 
    ); 
} 

const someNumber = 42; 
const someString = 'whoo'; 
const someValue = using([someNumber, someString], (num, str) => { 
    return num + str.length; 
}); 

(code in playground)

someValue의 유형 number이다.

+0

이 답변을 주셔서 감사합니다. 그리고 나는 생산에서 이와 같은 것을 기대하지 않습니다. 실험하는 것은 재미 있습니다. –

관련 문제