如何用 ts 写一个更新对象值的函数?

作者站长头像
站长
· 阅读数 6

下面代码会报 ts 错误,如何如何解决?

interface Type1 {
  src: string | null;
  blur: number;
  mask: number;
}

const obj1: Type1 = {
  src: null,
  blur: 0,
  mask: 0,
};

function updateObj1(key: keyof Type1, value: Type1[keyof Type1]) {
  obj1[key] = value; // Type 'string | number | null' is not assignable to type 'never'.
}
回复
1个回答
avatar
test
2024-06-25

需要类型推导(infer)

interface Foo {
  src: string | null;
  mask: number;
}

const foo: Foo = {
  src: null,
  mask: 0,
}

function setFoo<K extends keyof Foo>(key: K, value: Foo[K]) {
  foo[key] = value
}

setFoo('src', 'hello')
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容