type-challenges/questions/01130-medium-replacekeys
dongfang a2ecd3e4d4
modify tags and add test case (#18821)
* feat: add tags to some questions

* feat: add thenable test case to 00189-easy-awaited
2022-11-08 21:44:50 +08:00
..

ReplaceKeys medium #object-keys

by 贱贱 @lullabyjune

Take the Challenge

Implement a type ReplaceKeys, that replace keys in union types, if some type has not this key, just skip replacing, A type takes three arguments.

For example:

type NodeA = {
  type: 'A'
  name: string
  flag: number
}

type NodeB = {
  type: 'B'
  id: number
  flag: number
}

type NodeC = {
  type: 'C'
  name: string
  flag: number
}


type Nodes = NodeA | NodeB | NodeC

type ReplacedNodes = ReplaceKeys<Nodes, 'name' | 'flag', {name: number, flag: string}> // {type: 'A', name: number, flag: string} | {type: 'B', id: number, flag: string} | {type: 'C', name: number, flag: string} // would replace name from string to number, replace flag from number to string.

type ReplacedNotExistKeys = ReplaceKeys<Nodes, 'name', {aa: number}> // {type: 'A', name: never, flag: number} | NodeB | {type: 'C', name: never, flag: number} // would replace name to never

Back Share your Solutions Check out Solutions