Typescript 类型体操 —— 实现 SubType

720 阅读1分钟

要求

在开发过程中,我们常会遇到将一个对象的子对象 merge 到该对象中的场景。本题要求用 Typescript 来实现一个 merge 方法。

// your code, 补全 merge 函数的类型
function merge<Person>(){/*不需要实现 JS 逻辑*/}

type Person = {
  name: string;
  age: number;
}

merge({ name: 'name', age: 20 })
merge({ name: 'name' })

//@ts-expect-error
merge({ name: 'name', age: 20, sex: 'sex ' }) //没有 sex 属性

📖知识点

  1. In JavaScript it is fairly common to have APIs that expect property names as parameters, but so far it hasn’t been possible to express the type relationships that occur in those APIs.

Enter Index Type Query or keyof; An indexed type query keyof T yields the type of permitted property names for T. A keyof T type is considered a subtype of string.

🔗知识链接

  1. keyof

😢问题 & 解答

  1. 答题入口: SubType
  2. 解答

🍗场景

const assign = <T, K extends keyof T>(origin : T, mergeObject: Pick<T,K>) => {
    return Object.assign(origin, mergeObject);
}

assign({ name: 'name', age:' 123 '} , { name: '133 '})