这两个“类型”定义之间有什么区别,它们具有不同的通用位置,以及如何使用它们?[复制]

What's the different between these two `type` define which have different generic place, and how to use them? [duplicate]

提问人:ypa y yhm 提问时间:9/5/2023 最后编辑:Heretic Monkeyypa y yhm 更新时间:9/5/2023 访问量:26

问:

我发现了 2 个不同的:type

  1. type Pair = <Head, Tail> (head: Head) => (tail: Tail) => {head: Head; tail: Tail;}
  2. type Pair <Head, Tail> = (head: Head) => (tail: Tail) => {head: Head; tail: Tail;}

唯一的区别是 的地方。<Head, Tail>

它们都是合法的,但在使用时有所不同。

如:

当我定义一个函数时,我可以像这样使用第一个定义:pairtype

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"}

但是当我想使用第二个定义时,我只能这样写:typepair

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"}

但这不应该叫,我们至少应该叫它,但这不是我想要的。pairnumber_string_pair

使用 TypeScript v5.2.2这是测试。


老实说,我想知道如何使用第二个类型 Pair 定义来的类型符号,但是我找不到它,所以我问了这个问题......

而且,我想知道第一个是什么意思......我知道是什么意思,意志与,但是如果我定义,我不能像...那么,第二种类型 Fn 或第一种类型 Pair 有什么用,它们的含义是什么?type Pairtype Fn <X, Y> = (x: X) => YFn<number, string>(x: number) => stringtype Fn = <X, Y> (x: X) => YFn<number, string>

TypeScript 泛型类型参数 多态性 元语言

评论

0赞 Seti 9/5/2023
据我所知,第二个更易于使用(代码完成效果更好),仅此而已。
0赞 Seti 9/5/2023
但我会使用更多,因为它声明了 tyle 在使用时提供了两种类型,看起来像其他语言的模板化类型(而 ts 应该看起来有点像 C#)。此外,这个要求提供的类型是存在的,而不是一些通用名称,即使在您提供的第一个示例中也没有正确键入type Pair <Head, Tail> = (head: Head) => (tail: Tail) => {head: Head; tail: Tail;}PairHead/Tail
0赞 jcalz 9/5/2023
请参阅链接的问题和答案,了解泛型类型参数范围的两种不同“风格”的说明。

答: 暂无答案