[ts] Support override modifiers for parameter properties (#13428)
This commit is contained in:
@@ -283,6 +283,7 @@ export default (superClass: Class<Parser>): Class<Parser> =>
|
||||
} else {
|
||||
enforceOrder(startPos, modifier, modifier, "override");
|
||||
enforceOrder(startPos, modifier, modifier, "static");
|
||||
enforceOrder(startPos, modifier, modifier, "readonly");
|
||||
|
||||
modified.accessibility = modifier;
|
||||
}
|
||||
@@ -1927,10 +1928,23 @@ export default (superClass: Class<Parser>): Class<Parser> =>
|
||||
|
||||
let accessibility: ?N.Accessibility;
|
||||
let readonly = false;
|
||||
let override = false;
|
||||
if (allowModifiers !== undefined) {
|
||||
accessibility = this.parseAccessModifier();
|
||||
readonly = !!this.tsParseModifier(["readonly"]);
|
||||
if (allowModifiers === false && (accessibility || readonly)) {
|
||||
const modified = {};
|
||||
this.tsParseModifiers(modified, [
|
||||
"public",
|
||||
"private",
|
||||
"protected",
|
||||
"override",
|
||||
"readonly",
|
||||
]);
|
||||
accessibility = modified.accessibility;
|
||||
override = modified.override;
|
||||
readonly = modified.readonly;
|
||||
if (
|
||||
allowModifiers === false &&
|
||||
(accessibility || readonly || override)
|
||||
) {
|
||||
this.raise(startPos, TSErrors.UnexpectedParameterModifier);
|
||||
}
|
||||
}
|
||||
@@ -1938,13 +1952,14 @@ export default (superClass: Class<Parser>): Class<Parser> =>
|
||||
const left = this.parseMaybeDefault();
|
||||
this.parseAssignableListItemTypes(left);
|
||||
const elt = this.parseMaybeDefault(left.start, left.loc.start, left);
|
||||
if (accessibility || readonly) {
|
||||
if (accessibility || readonly || override) {
|
||||
const pp: N.TSParameterProperty = this.startNodeAt(startPos, startLoc);
|
||||
if (decorators.length) {
|
||||
pp.decorators = decorators;
|
||||
}
|
||||
if (accessibility) pp.accessibility = accessibility;
|
||||
if (readonly) pp.readonly = readonly;
|
||||
if (override) pp.override = override;
|
||||
if (elt.type !== "Identifier" && elt.type !== "AssignmentPattern") {
|
||||
this.raise(pp.start, TSErrors.UnsupportedParameterPropertyKind);
|
||||
}
|
||||
|
||||
@@ -1178,6 +1178,7 @@ export type TSParameterProperty = HasDecorators & {
|
||||
// At least one of `accessibility` or `readonly` must be set.
|
||||
accessibility?: ?Accessibility,
|
||||
readonly?: ?true,
|
||||
override?: ?true,
|
||||
parameter: Identifier | AssignmentPattern,
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user