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.
Note that C# has a similar concept, known as hiding, which can be used to statically shadow an inherited member without overriding it. However this largely disanalogous, existing to address the needs of C#'s runtime and impacting and fully reified type system.