簡體   English   中英

有沒有一種類型級別的方法可以從類中提取具有默認值的屬性?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM