TypeScript“映射类型”大写

问题描述 投票:0回答:1

这两种映射类型有什么区别吗?

type UppercaseProperties1<T> = {
  [P in keyof T as Capitalize<string & P>]: T[P]
}

type UppercaseProperties2<T> = {
  [P in keyof T as Capitalize<P & string>]: T[P]
}

我在 TypeScript 游乐场中看到像

Person

这样的简单类型
interface Person {
  name: string;
  age: number;
}
对于每个映射类型

给出相同的结果

type UppercasePerson = {
    Name: string;
    Age: number;
}

但也许在某些情况下,这种细微差别会产生影响?

typescript mapped-types
1个回答
0
投票

没有什么区别。 交叉点

string & P
P & string
是相同的。在大多数情况下,交叉顺序根本不重要。在某些情况下,它确实很重要,例如当函数相交时,TypeScript 将它们视为与顺序相关的重载。但在示例代码中,其中
P
是来自 映射类型的类似键的类型参数,那么
P & string
string & P
要么只是
P
(如果
P extends string
为 true),要么是
never
(如果
P extends string
为假)。 所以完全没有区别。

© www.soinside.com 2019 - 2024. All rights reserved.