есть ли способ превратить необязательное свойство, такое как {x ?: number}, в требуемое (неопределимое) `{x: undefined | число} `через типы карт в машинописи?

1 ответ

Вы можете получить нужный тип, используя сопоставленные типы. Вы можете получить дополнительные и требуемые ключи от типа, как описано здесь

type OptionalKeys<T> = { [K in keyof T]-?:
  ({} extends { [P in K]: T[K] } ? K : never)
}[keyof T]

type RequiredKeys<T> = { [K in keyof T]-?:
  ({} extends { [P in K]: T[K] } ? never : K)
}[keyof T]

type Id<T> = { [P in keyof T]: T[P]}
type OptionalToUndefined<T> = Id<{
  [K in OptionalKeys<T>]-?: T[K] | undefined  
} & { 
  [K in RequiredKeys<T>]-?: T[K] 
}>
//  { y: number | undefined; x: boolean; }
type Foo = OptionalToUndefined<{ x: boolean; y?: number }> 
0
ответ дан Titian Cernicova-Dragomir 16 January 2019 в 22:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: