gpt4 book ai didi

typescript - 仅黑白差异排除和省略(选择和排除) typescript

转载 作者:行者123 更新时间:2023-12-04 01:35:03 30 4
gpt4 key购买 nike

根据 Pick @ typescriptlang.org 的定义,它仅为提到的属性构造一个新类型。 Exclude @ typescriptlang.org是相反的。
我见过以下用法

export type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
但我不太明白。我们可以简单地使用 Exclude省去非必填字段并构造一个新类型。为什么要合并 PickExclude用作 Omit ?
另一个例子:
function removeName<Props extends ExtractName>(
props: Props
): Pick<Props, Exclude<keyof Props, keyof ExtractName>> {
const { name, ...rest } = props;
// do something with name...
return rest;
}
上面的返回类型不能用 Exclude重写如 Exclude<Props, ExtractName> ?

最佳答案

您说得对 Pick ,它接受一个对象类型并提取指定的属性。所以:

 Pick<{ a: string, b:string }, 'a' > === { a: string } 
与此相反的其实是后来添加的 Omit .此类型采用对象类型并从该类型中删除指定的属性。
 Omit<{ a: string, b:string }, 'a' > === { b: string }
Exclude 是一种不同的野兽,它采用联合类型并删除该联合的组成部分。
Exclude<string | number, string > === number
Exclude定义为:
type Exclude<T, U> = T extends U ? never : T;
这意味着 Exclude将返回 never如果 T扩展 U , 和 T如果没有。所以这意味着:
  • Exclude<string, number>string
  • Exclude<string, string>never

  • 问题是条件类型 distribute over naked type parameters .所以这意味着如果应用于联合,我们会得到以下结果:
    Exclude<string | number, number>
    => Exclude<string, number> | Exclude<number, number> // Exclude distributes over string | number
    => string | never => // each application of Exclude resolved to either T or never
    => string // never in unions melts away
    Exclude用于 Omit 的定义中. Exclude<keyof T, K>T 的键的并集并删除 K 指定的键.然后 PickT 中提取剩余的属性.
    编辑
    虽然两者 OmitExclude采用两个类型参数(两者之间没有强制关系)它们不能互换使用。看看这些类型的一些应用程序的结果:
    type T0 = Omit<{ a: string, b: string }, "a"> //  { b: string; }, a is removed 
    type T1 = Exclude<{ a: string, b: string }, "a"> // { a: string, b: string }, a does not extend { a: string, b: string } so Exclude does nothing

    type T2 = Omit<string | number, string> // Attempts to remove all string keys (basically all keys) from string | number , we get {}
    type T3 = Exclude<string | number, string> // string extends string so is removed from the union so we get number

    关于typescript - 仅黑白差异排除和省略(选择和排除) typescript ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56916532/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com