【发布时间】:2020-12-16 03:02:25
【问题描述】:
我试图从Distributive conditional types 部分理解这个例子:
条件类型在与映射结合使用时特别有用 类型:
type FunctionPropertyNames<T> = { [K in keyof T]: T[K] extends Function ? K : never; }[keyof T];
在这个例子中,index access 操作符的用法对我来说不是很清楚。 这是使用相同想法的最简单示例(据我所知):
type Foo = {
prop1: never;
prop2: never
method1: "method1";
method2: "method2";
}
type FunctionPropertyNames = Foo[keyof Foo] // "method1" | "method2"
所以,我的问题是:索引访问运算符的这种用法只是分布式条件类型的一种特殊情况吗?因为看起来结果类型是 T[K] 的所有应用程序的联合,其中 never 被过滤,因为 "never is the empty union"
更新。我将尝试更准确地表述这个问题: TS 手册描述了映射类型和条件类型的语法。 但是,我没有找到任何关于这种类型定义形式的描述:
type Keys = 'name1' | 'name2' | 'name3'
type Foo = Bar[Keys]
或者,更现实的:
type Foo = Bar[keyof Bar]
它看起来像某种映射,但它也提供过滤,在 Keys 包含never 的情况下。所以我的问题更多的是关于 TS 类型系统的这个特性是否有任何精确的描述。
【问题讨论】:
标签: typescript typescript-generics