Skip to content

Commit

Permalink
fix: Correctly parse cls.fn<C> = x (#16476)
Browse files Browse the repository at this point in the history
* fix TSInstantiationExpression

* update tests
  • Loading branch information
liuxingbaoyu committed May 5, 2024
1 parent b1c8837 commit 4bd1b2c
Show file tree
Hide file tree
Showing 10 changed files with 760 additions and 0 deletions.
1 change: 1 addition & 0 deletions packages/babel-parser/src/plugins/typescript/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3708,6 +3708,7 @@ export default (superClass: ClassWithMixin<typeof Parser, IJSXParserMixin>) =>
TSTypeCastExpression: true,
TSParameterProperty: "parameter",
TSNonNullExpression: "expression",
TSInstantiationExpression: "expression",
TSAsExpression: (binding !== BindingFlag.TYPE_NONE ||
!isUnparenthesizedInAssign) && ["expression", true],
TSSatisfiesExpression: (binding !== BindingFlag.TYPE_NONE ||
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
export abstract class AbstractClass {
public static myFunc?: <M extends AbstractClass>(
this: AbstractClass,
instance: M,
) => void;
}

export class ConcreteClass extends AbstractClass {
declare myField: string;
}

export const init = () => {
const cls = ConcreteClass;

cls.myFunc<ConcreteClass> = (instance) => {
console.log(instance.myField);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"BABEL_8_BREAKING": false,
"plugins": ["typescript"]
}

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
export abstract class AbstractClass {
public static myFunc?: <M extends AbstractClass>(
this: AbstractClass,
instance: M,
) => void;
}

export class ConcreteClass extends AbstractClass {
declare myField: string;
}

export const init = () => {
const cls = ConcreteClass;

cls.myFunc<ConcreteClass> = (instance) => {
console.log(instance.myField);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"BABEL_8_BREAKING": true,
"plugins": ["typescript"]
}

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
export abstract class AbstractClass {
public static myFunc?: <M extends AbstractClass>(
this: AbstractClass,
instance: M,
) => void;
}

export class ConcreteClass extends AbstractClass {
declare myField: string;
}

export const init = () => {
const cls = ConcreteClass;

cls.myFunc<ConcreteClass> = (instance) => {
console.log(instance.myField);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"sourceType": "module",
"plugins": [
[
"transform-typescript",
{
"allowDeclareFields": true
}
]
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
export class AbstractClass {
static myFunc;
}
export class ConcreteClass extends AbstractClass {}
export const init = () => {
const cls = ConcreteClass;
cls.myFunc = instance => {
console.log(instance.myField);
};
};

0 comments on commit 4bd1b2c

Please sign in to comment.