[Typescript] “Required” Mapped Type, +/- Modifiers

For example we have interface:

interface Person {
  name: string,
  age?: number  
}

'age' is an optional prop.

// will have an error since person.age is used
function printAge(person) {
  return `${person.name} is ${person.age}`
}

const person = {
    name: "wan'
}

printAge(person)

Required type:

type MyRequired<T> = {
    [P inkeyof T]-?: T[P]
}

'-?': remove optional modifier so it become required prop.

function printAge(person: MyRequired<Person>) {
  return `${person.name} is ${person.age}`
}

const person: MyRequired<Person> = {
    name: "wan',
    age: 23
}

printAge(person)

or can use built-in:

function printAge(person: Required<Person>) {
  return `${person.name} is ${person.age}`
}

const person: Required<Person> = {
    name: "wan',
    age: 23
}

printAge(person)
原文地址:https://www.cnblogs.com/Answer1215/p/13758747.html