![](/img/trans.png)
[英]Is it possible to have not fully applied type-level functions in TypeScript?
[英]Is there a type-level way to extract properties that have default from a class?
我想提取具有默认值的类中的属性的键名。 该信息可用于类型系统吗?
class Foo {
hasDefault: boolean = true
alsoHasDefault: number = 42
noDefault: boolean
}
// How can this be implemented?
type DefaultPropertyNames<T> = ...
// Example output:
type FooDefaults = DefaultPropertyNames<Foo> // -> 'hasDefault' | 'alsoHasDefault'
我认为“无默认值”的意思是该值可以不确定。 当前,您的代码引发类型错误,因为noDefault
在其类型定义中不包含undefined。
因此,让我重新构想这个问题:
如何找到类中所有可能未定义的键?
像这样的作品:
type DefaultPropertyNames<T> = Exclude<{
[K in keyof T]: {key: K, value: T[K] extends T[K] & {} ? true : false}
}[keyof T], {value: false}>["key"]
解释一下:
T[K] & {}
从类型中删除undefined
。
T[K] extends T[K] & {}
告诉您undefined是否在并集类型中
{[K in keyof T]: ... }[keyof T]
从每个属性键创建一个联合类型
Exclude
使您可以从联合类型中删除项目。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.