【发布时间】:2018-05-29 13:21:27
【问题描述】:
考虑这个 TypeScript 类,它通过将实现拆分为超类和子类来提供类型检查的通用 getter 和 setter:
class ICompetence {
protected _id : number | undefined;
protected name: string | undefined;
}
export default class Competence extends ICompetence {
set<K extends keyof ICompetence>(key: K, value: ICompetence[K]): void {
this[key] = value;
}
get<K extends keyof ICompetence>(key: K) : ICompetence[K] {
return this[key];
}
constructor() {
super();
}
}
类是这样使用的:
let competence = new Competence():
competence.set("name", "name value text");
但是,然后我收到此错误:
error TS2345: Argument of type '"name"' is not assignable to parameter of type
可以通过从接口类中删除受保护的注解来克服该错误:
class ICompetence {
_id : number | undefined;
name: string | undefined;
}
TypeScript 是否提供任何功能来避免在属性受到保护时发生这种错误?
【问题讨论】:
-
Nope.
keyof只会返回公钥,而不是非公钥 -
这不是错误......既然你想公开地址
set,它必须是公开的......competence.set("name", "name value text");。
标签: typescript