【发布时间】:2021-04-04 06:36:51
【问题描述】:
我想做类似以下的事情。考虑我们有一个类型:
interface MyInterface {
stringProp: string,
numberProp: number
}
我想创建一个实用程序类型,它会在给定另一种类型(例如number 或string)的情况下过滤掉该类型的属性,如下所示:
/// Utility type, this is the thing I'm trying to define
type TypeFiltered<T extends object, V> = ...
// Apply to MyInterface, number properties only
type MyInterfaceNumberProperties = TypeFiltered<MyInterface, number>
// MyInterfaceNumberProperties is
// { numberProp: number }
我知道我可以使用 never 获取我不想要的类型的完整结构:
type ReplaceWithNever<T extends object, V> = {
[K in keyof T]: T[K] extends V ? T[K] : never
}
但这就是我卡住的地方,至于MyInterface,它有效地产生了一个具有以下内容的类型:
/// ReplaceWithNever<MyInterface, number>
{
myString: never,
myNumber: number
}
有没有办法从keyof ReplaceWithNever<T, V> 中过滤掉keyof ReplaceWithNever<T, V> 产生never 的项目?
【问题讨论】:
标签: typescript