typescript - ¿Cuál es la diferencia entre estas dos definiciones de `type` que tienen diferentes lugares genéricos, y cómo usarlas?
Encontré 2 type diferentes como:
type Pair = <Head, Tail> (head: Head) => (tail: Tail) => {head: Head; tail: Tail;}type Pair <Head, Tail> = (head: Head) => (tail: Tail) => {head: Head; tail: Tail;}
La única diferencia es el lugar de <Head, Tail>.
Ambos son legales pero diferentes mientras se usan.
Tal como:
Cuando defino una función pair, puedo usar el primer type definido así:
type Pair = <Head, Tail> (head: Head) => (tail: Tail) => {head: Head; tail: Tail;} ;
const pair: Pair = <Head, Tail> (head: Head) => (tail: Tail) => ({head, tail}) ;
const result = pair (1) ("two") ;
console.log(result); // {head: 1, tail: "two"}
Pero cuando quiero usar el segundo type definido en pair, solo puedo escribir eso:
type Pair <Head, Tail> = (head: Head) => (tail: Tail) => {head: Head; tail: Tail;} ;
const pair: Pair<number, string> = <Head, Tail> (head: Head) => (tail: Tail) => ({head, tail}) ;
const result = pair (1) ("two") ;
console.log(result); // {head: 1, tail: "two"}
Pero eso no debería llamarse pair, deberíamos llamarlo number_string_pair al menos, pero esto no es lo que quiero.
Usa TypeScript v5.2.2, aquí está la prueba.
Para ser honesto, quiero saber cómo puedo usar el segundo tipo Pair definido para el signo de tipo de pair, pero no lo puedo encontrar, así que hice esta pregunta ...
Y quiero saber qué significa el primer type Pair... Sé qué significa type Fn <X, Y>=(x: X) => Y, el Fn<number, string> será igual que (x: number) => string, pero si defino type Fn=<X, Y> (x: X) => Y, no puedo usarlo como Fn<number, string>... entonces, ¿cuál es el uso del segundo type Fn o del primer type Pair y qué significado tienen?