【发布时间】:2021-02-20 00:27:43
【问题描述】:
我最近开始使用 TypeScript 编写代码,但遇到了一个我似乎无法找到答案的问题。
考虑下面的代码:
interface testInterface {
a: string;
b: number;
c?: number;
}
const testObject: testInterface = {
a: "1",
b: 2,
};
function selectorFunction<GenericKey extends keyof testInterface>(
key: GenericKey
): Required<testInterface>[keyof testInterface] {
if (testObject[key]) return testObject[key];
throw new Error("Error");
}
解释一下我想要实现的目标:selectorFunction 应该根据接收到的键从testObject 返回一个值,同时还具有该值的正确类型。这就是关键属性类型是 Generic 的原因。
就其本身而言,它工作正常,当可选属性发挥作用时问题就开始了,因为方法返回类型是必需的,因此该方法不会返回任何未定义的值。
理论上应该很容易,只需添加一个 if 来检查该属性是否存在,它应该可以工作,但是 typescript 仍然给我以下错误:
Type 'string | number | undefined' is not assignable to type 'string | number'.
Type 'undefined' is not assignable to type 'string | number'.
Type 'testInterface[GenericKey]' is not assignable to type 'number'.
Type 'string | number | undefined' is not assignable to type 'number'.
Type 'undefined' is not assignable to type 'number'.ts(2322)
【问题讨论】:
标签: typescript typescript-typings typescript-generics