mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-17 19:11:26 -06:00
keyword `abstract` is parsed at the head of class declarations and as a modifier for class member functions/variables. The following checks have been implemented: * Objects whose type is an abstract class cannot be instantiated with `new`. * all overloads of a function must match w/r/t having the abstract keyword. * a member/class decl can't use the `abstract` keyword multiple times. * a member can't be both `abstract` and `static`. * a member can't be both `abstract` and `private`. * Accessibility modifiers can't follow `abstract` * Only classes and member functions can be declared abstract. * abstract methods don't need an implementation * abstract methods can only appear in abstract classes. TODO: * forbid abstract methods from having an implementation. * make sure, barring overriding, an inherited method is abstract iff it is abstract in the parent. * If a class has an abstract members, then it must be abstract. (eg: class B does not implement inherited member 'foo()') * prevent overriding a non-abstract method with an abstract method. * update "abstractness" flag when overriding abstract method with non-abstract method. * prevent calling an abstract method via super.<abstract method name>() * make all overloads of an abstract method adjacent to eachother. * constructors can't be declared abstract -- give appropriate error. * figure out what to emit to the *.ts file -- probably nothing. * figure out what to emit to the *.d.ts file. * process abstract declarations.