Equivalent of c# class virtual member in TypeScript
So in C# when I've been creating model classes and lazy loading things, I do something like this:
public int? User_ID { get; set; }
public int? Dept_ID { get; set; }
Then a little farther down in my class I pop in my virtuals like so:
public virtual User User {get; set;}
public virtual Department Dept {get; set;}
How would I do this in Typescript? Something like this?:
User_ID: number;
Dept_ID: number;
User: User;
Dept: Department;
I don't think interfaces is what I want/need...but then again protected doesn't seem correct either. Something tells me I'm missing an obvious answer here.
The following applies equally to TypeScript and JavaScript:
There is no equivalent.
Every member access in JavaScript is subject to dynamic dispatch by definition. This is because member access in JavaScript is, morally, a key lookup in a hash table.
An object may declare a member with the same key as one it inherits via the prototype chain and thereby shadow the inherited member but this is not the same as virtualness, a concept not present in the language.
Yes there are ..
//non-abstract or abstract class
class A {
// The virtual method
protected virtualStuff1?():void;
public Stuff2(){
//Calling overridden child method by parent if implemented
this.virtualStuff1 && this.virtualStuff1();
alert("Baseclass Stuff2");
}
}
//class B implementing virtual method
class B extends A{
// overriding virtual method
public virtualStuff1()
{
alert("Class B virtualStuff1");
}
}
//Class C not implementing virtual method
class C extends A{
}
var b1 = new B();
var c1= new C();
b1.Stuff2();
b1.virtualStuff1();
c1.Stuff2();