【发布时间】:2020-10-31 22:05:04
【问题描述】:
游乐场是here
我正在尝试在 Typescript 中定义一个通用类型安全的 setter 函数。 类似于以下内容:
type A = {a1: string, a2: number}
let a: A = {a1: 'foo', a2: 42};
setPropertyOnA('a1', 42); // this should fail to type-check
setPropertyOnA('a2', '43'); // ditto
以下是我所做的(上面给出了游乐场链接):
type PropType<TObj, TProp extends keyof TObj> = TObj[TProp];
type A = {a1: string, a2: number}
let a: A = {a1: 'foo', a2: 42};
function setPropertyOnA(property: keyof A
, v: PropType<A, typeof property>): void {
a[property] = v; // Q1. why is this failing?
}
setPropertyOnA('a1', 42); // Q2. this should fail to type-check
setPropertyOnA('a2', '43'); // ditto
PropType 实用程序是从 here 复制而来的
在标有Q1的那一行我得到:
类型 'PropType' 不能分配给类型 'never'。
类型“字符串”不可分配给类型“从不”。(2322)
在标有Q2 的两行中,我原以为 Typescript 会抱怨,但事实并非如此。
我做错了什么?
【问题讨论】:
标签: typescript