【发布时间】:2019-07-17 13:37:09
【问题描述】:
我一直在尝试理解打字稿中的继承
class user {
name: string;
email: string;
constructor(name: string, email: string) {
this.name = name;
this.email = email;
}
checkUserData = id => {
console.log(
"This user name is" +
this.name +
"his email address is" +
this.email +
"and his ID is" +
id
);
};
}
class college extends user {
id: number;
constructor(name, email, id) {
super(name, email);
this.id = id;
}
checkUserData = () => {
super.checkUserData(this.id);
};
}
let newUser: user = new college("Rohit Bhatia", "iro@gmail.com", 4556);
console.log(newUser.checkUserData());
这是我的代码,这里我收到以下错误
index.ts:31:11 - 错误 TS2340:只有公共和受保护的方法 基类可以通过 'super' 关键字访问。
31 super.checkUserData(this.id); ~~~~~~~~~~~~~~~~
index.ts:37:13 - 错误 TS2554:预期 1 个参数,但得到 0。
37 控制台.log(newUser.checkUserData()); ~~~~~~~~~~~~~~~~~~~~~~~
index.ts:10:19 10 校验用户数据 = id => { ~~ 没有提供“id”的参数
在我的代码中,我没有看到 private method 的用法,那么为什么会出现该错误?另外,我知道我的代码有很多错误,有人可以帮我修复它吗?
我的意图是什么?
继承类用户, 在父类中创建一个新的属性 checkUserData(认为这是一个公共类),它以 ID 作为参数, 从一个子类调用该类并将 id 传递给它。
【问题讨论】:
-
您正在使
checkUserData成为函数值属性而不是方法。它们不一样。试试checkUserData(id: number) { /* impl */ }而不是checkUserData = id => { /* impl */ }。 -
对于第二个问题,不要将
newUser注释为user,然后尝试不带参数调用其checkUserData()方法,因为user.checkUserData()需要一个参数。您需要将其注释为let newUser: college或只是let newUser = new college(...)。一旦你将newUser从college扩大到user,编译器就不再知道它是college并且不会让你调用college特定的方法。 -
通常情况下,每个问题只处理一个主题时效果最好……“帮助我解决所有这些问题”对提问者有帮助,但对后来的人没有多大帮助。因此,如果您有多个问题,您可能应该打开多个问题。
-
如果这些 cmets 中的任何一个对我有帮助,我可能会在使用真正的计算机时将它们充实为答案(否则,如果其他人决定在我之前做出真正的答案,我不会被冒犯)
-
我部分明白了你所说的,你能详细解释一下你想表达什么吗?
标签: typescript