![](/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.