2015-09-21 8 views
5

Dokument zawiera wsparcie dla składni JSX. Więc mam wyraz, który działa całkiem dobrze z tradycyjnymi plików * .TS ale żaden z nich .tsx *:Opis maszynowy TSX i ogólne parametry

const f = <T1>(arg1: T1) => <T2>(arg2: T2) => { 
    return { arg1, arg2 }; 
} 

Zastanawiam się czy jest jakiś sposób, aby pracować wewnątrz * .tsx pliku?

Odpowiedz

5

Można użyć wyrażeń funkcyjnych Zamiast:

const f = function<T1>(arg1: T1) { 
    return function<T2>(arg2: T2) { 
     return { arg1, arg2 }; 
    }; 
}; 

lub alternatywnie, odkryłem to działa:

const f = <T1, T2>(arg1: T1) => (arg2: T2) => { 
    return { arg1, arg2 }; 
}; 

Na marginesie, wydaje się, że będzie dobrze, gdy kompilacji podano wiele ogólnych parametrów, ale nie jedno. Na przykład podanie fałszywego parametru ogólnego spowoduje to:

const f = <T1, Dummy>(arg1: T1) => { 
    return { arg1 }; 
}; 

To zdecydowanie nie jest idealne. Może istnieć inny sposób, aby to działało z jednym parametrem generycznym, ale nie jestem pewien.

4

Jest to wynikiem analizowania niejednoznaczności. Jedną rzeczą, która uczyniłaby to jednoznacznym, jest dodanie wyraźnego ograniczenia na T1.

const f = <T1 extends {}>(arg1: T1) => { 
    return { arg1 }; 
} 

parametrów typu jak T1 niejawnie posiada ograniczenie: {} tak, więc w tym przypadku kod jest funkcjonalnie równoważne.

Zastosuj to rozwiązanie i możesz zastosować do każdej funkcji strzałki z oryginalnego przykładu.