I found 2 different type
like:
type Pair = <Head, Tail> (head: Head) => (tail: Tail) => {head: Head; tail: Tail;}
type Pair <Head, Tail> = (head: Head) => (tail: Tail) => {head: Head; tail: Tail;}
The only diff is <Head, Tail>
's place.
They're both legal but different while be use.
Such as:
When I define a function pair
, I can use the first type
define like this:
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"}
But when I want to use the second type
define on pair
, I can only write that:
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"}
But that should not called pair
, we should call it number_string_pair
at least, but this is not what I want.
Use TypeScript v5.2.2, Here is the test.
To be honest, I want to know how can I use the second type Pair
define to pair
's type sign, but I can't find it, so I asked this question ...
And, I want to know what the first type Pair
mean ... I know about what type Fn <X, Y> = (x: X) => Y
mean, the Fn<number, string>
will same as (x: number) => string
, but if I defined type Fn = <X, Y> (x: X) => Y
, I can't use it like Fn<number, string>
... so, what's the use of the second type Fn
or first type Pair
and what's the meaning of them ?