【问题标题】:How to use Typescript Generics in modifier functions如何在修饰函数中使用 Typescript 泛型
【发布时间】:2020-07-13 14:53:43
【问题描述】:

我正在寻找一种正确强类型以下情况的方法,我怀疑在这种情况下我需要使用 Typescript 泛型。

interface Person {
  name: string;
  age: number;
}

const person: Person = {
  name: "John",
  age: 30,
};

const alterPerson = (key: keyof Person, val) => {
  person[key] = val;
}

我的意图是函数“alterPerson”知道它只能将 Person 键作为其第一个参数,然后,一旦它使用了一个键,我希望该函数知道可以为该键分配什么类型的值。

你能告诉我这是怎么做到的吗?谢谢!

【问题讨论】:

    标签: typescript typescript-generics


    【解决方案1】:

    alterPerson 仍然直接与person 变量耦合。为了让泛型真正可重用,您还需要将该变量作为函数参数传递。

    const alterObject = <T>(object: T, key: keyof T, val: T[keyof T]) => {
      object[key] = val;
    }
    

    【讨论】:

    • 谢谢,您的解决方案似乎有效!但是我真的希望有办法不传递那个额外的对象参数。我会暂时将其标记为正确,以防提供替代方案。
    • 我不认为硬编码对象是一个好主意,因为它不会使这个函数的类型可重用,所以泛型并没有真正做太多。您是否需要重用此函数,还是只是想避免在原始函数中多次使用Person
    猜你喜欢
    • 2021-11-17
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多