typescript中的自定义扩展方法



我试图为我的界面Student创建一个扩展方法

declare global {  
interface Student {  
CourseOpted(): String;  
}  
}  
Student.prototype.CourseOpted = function(): string {  
return 'some-string';
}  
export {}; 

当我把光标放在Student:-得到这个错误

'Student'只指向一个类型,但在这里被用作一个值。参考这篇文章:- https://www.c-sharpcorner.com/article/learn-about-extension-methods-in-typescript/#:~:text=Extension%2Dmethod%20gives%20you%20the,any%20data%2Dtype%20you%20want.

我可以注意到的是;-当我们扩展类的接口,如字符串,数字,数组..扩展方法是可能的。那么为什么不是上面的例子呢?请帮帮我!解决这个错误

提前感谢:)

编辑:-所以我们找到了这个扩展方法repo:- https://github.com/staeke/ts-extension-methods

interface是一个编译时间元素。当你将Typescript编译成Javascript时,它不会为interface发出任何东西。interface只存在于编译时(有利于typescript)。

对于String, Number等有效的原因是因为它们在运行时存在。

如果你想要不同的函数实现

  • 那么为什么不将Student声明为具有默认功能实现的class,并允许子类在需要时覆盖功能实现。

如果你想静态实现

  • 然后简单地将其声明为Student类中的静态函数

Studentinterface,而不是class,您应该在进行任何更改之前创建类并导入它。也许创建一个新类更好。如果您从服务器获取学生数据,您还可以向它添加序列化。

Typescript Playground Link

interface IStudent {
id: number;
firstName: string,
lastName: string,
}
class Student implements IStudent {
id: number;
firstName: string;
lastName: string;
constructor(student: IStudent)
constructor(id: number, firstName: string, lastName: string)
constructor(idOrStudent: number | IStudent, firstName?: string, lastName?: string) {
if (typeof idOrStudent === "object") {
this.id = idOrStudent.id;
this.firstName = idOrStudent.firstName;
this.lastName = idOrStudent.lastName;
return;
}
this.id = idOrStudent;
this.firstName = firstName as string;
this.lastName = lastName as string;
}
public foo() {
return "bar";
}
}
const student0 = new Student(0, "John", "Doe");
console.log(student0);
console.log(student0.foo());
const student1 = new Student({
id: 1,
firstName: "Milka",
lastName: "Helgi"
});
console.log(student1);

相关内容

  • 没有找到相关文章

最新更新