Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit b82fe52

Browse filesBrowse files
authored
Merge pull request microsoft#13191 from Microsoft/fix13157
Aggregate transform flags for ExpressionWithTypeArguments
2 parents 01a7ba8 + d7b61b2 commit b82fe52
Copy full SHA for b82fe52

5 files changed

+136-1Lines changed: 136 additions & 1 deletion

File tree

Expand file treeCollapse file tree
Open diff view settings
Filter options
Expand file treeCollapse file tree
Open diff view settings
Collapse file

‎src/compiler/visitor.ts‎

Copy file name to clipboardExpand all lines: src/compiler/visitor.ts
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1328,7 +1328,7 @@ namespace ts {
13281328
function aggregateTransformFlagsForSubtree(node: Node): TransformFlags {
13291329
// We do not transform ambient declarations or types, so there is no need to
13301330
// recursively aggregate transform flags.
1331-
if (hasModifier(node, ModifierFlags.Ambient) || isTypeNode(node)) {
1331+
if (hasModifier(node, ModifierFlags.Ambient) || (isTypeNode(node) && node.kind !== SyntaxKind.ExpressionWithTypeArguments)) {
13321332
return TransformFlags.None;
13331333
}
13341334

Collapse file
+35Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
//// [jsxInExtendsClause.tsx]
2+
// https://github.com/Microsoft/TypeScript/issues/13157
3+
declare namespace React {
4+
interface ComponentClass<P> { new (): Component<P, {}>; }
5+
class Component<A, B> {}
6+
}
7+
declare function createComponentClass<P>(factory: () => React.ComponentClass<P>): React.ComponentClass<P>;
8+
class Foo extends createComponentClass(() => class extends React.Component<{}, {}> {
9+
render() {
10+
return <span>Hello, world!</span>;
11+
}
12+
}) {}
13+
14+
//// [jsxInExtendsClause.js]
15+
var __extends = (this && this.__extends) || function (d, b) {
16+
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
17+
function __() { this.constructor = d; }
18+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
19+
};
20+
var Foo = (function (_super) {
21+
__extends(Foo, _super);
22+
function Foo() {
23+
return _super.apply(this, arguments) || this;
24+
}
25+
return Foo;
26+
}(createComponentClass(function () { return (function (_super) {
27+
__extends(class_1, _super);
28+
function class_1() {
29+
return _super.apply(this, arguments) || this;
30+
}
31+
class_1.prototype.render = function () {
32+
return React.createElement("span", null, "Hello, world!");
33+
};
34+
return class_1;
35+
}(React.Component)); })));
Collapse file
+42Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
=== tests/cases/compiler/jsxInExtendsClause.tsx ===
2+
// https://github.com/Microsoft/TypeScript/issues/13157
3+
declare namespace React {
4+
>React : Symbol(React, Decl(jsxInExtendsClause.tsx, 0, 0))
5+
6+
interface ComponentClass<P> { new (): Component<P, {}>; }
7+
>ComponentClass : Symbol(ComponentClass, Decl(jsxInExtendsClause.tsx, 1, 25))
8+
>P : Symbol(P, Decl(jsxInExtendsClause.tsx, 2, 27))
9+
>Component : Symbol(Component, Decl(jsxInExtendsClause.tsx, 2, 59))
10+
>P : Symbol(P, Decl(jsxInExtendsClause.tsx, 2, 27))
11+
12+
class Component<A, B> {}
13+
>Component : Symbol(Component, Decl(jsxInExtendsClause.tsx, 2, 59))
14+
>A : Symbol(A, Decl(jsxInExtendsClause.tsx, 3, 18))
15+
>B : Symbol(B, Decl(jsxInExtendsClause.tsx, 3, 20))
16+
}
17+
declare function createComponentClass<P>(factory: () => React.ComponentClass<P>): React.ComponentClass<P>;
18+
>createComponentClass : Symbol(createComponentClass, Decl(jsxInExtendsClause.tsx, 4, 1))
19+
>P : Symbol(P, Decl(jsxInExtendsClause.tsx, 5, 38))
20+
>factory : Symbol(factory, Decl(jsxInExtendsClause.tsx, 5, 41))
21+
>React : Symbol(React, Decl(jsxInExtendsClause.tsx, 0, 0))
22+
>ComponentClass : Symbol(React.ComponentClass, Decl(jsxInExtendsClause.tsx, 1, 25))
23+
>P : Symbol(P, Decl(jsxInExtendsClause.tsx, 5, 38))
24+
>React : Symbol(React, Decl(jsxInExtendsClause.tsx, 0, 0))
25+
>ComponentClass : Symbol(React.ComponentClass, Decl(jsxInExtendsClause.tsx, 1, 25))
26+
>P : Symbol(P, Decl(jsxInExtendsClause.tsx, 5, 38))
27+
28+
class Foo extends createComponentClass(() => class extends React.Component<{}, {}> {
29+
>Foo : Symbol(Foo, Decl(jsxInExtendsClause.tsx, 5, 106))
30+
>createComponentClass : Symbol(createComponentClass, Decl(jsxInExtendsClause.tsx, 4, 1))
31+
>React.Component : Symbol(React.Component, Decl(jsxInExtendsClause.tsx, 2, 59))
32+
>React : Symbol(React, Decl(jsxInExtendsClause.tsx, 0, 0))
33+
>Component : Symbol(React.Component, Decl(jsxInExtendsClause.tsx, 2, 59))
34+
35+
render() {
36+
>render : Symbol((Anonymous class).render, Decl(jsxInExtendsClause.tsx, 6, 84))
37+
38+
return <span>Hello, world!</span>;
39+
>span : Symbol(unknown)
40+
>span : Symbol(unknown)
41+
}
42+
}) {}
Collapse file
+46Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
=== tests/cases/compiler/jsxInExtendsClause.tsx ===
2+
// https://github.com/Microsoft/TypeScript/issues/13157
3+
declare namespace React {
4+
>React : typeof React
5+
6+
interface ComponentClass<P> { new (): Component<P, {}>; }
7+
>ComponentClass : ComponentClass<P>
8+
>P : P
9+
>Component : Component<A, B>
10+
>P : P
11+
12+
class Component<A, B> {}
13+
>Component : Component<A, B>
14+
>A : A
15+
>B : B
16+
}
17+
declare function createComponentClass<P>(factory: () => React.ComponentClass<P>): React.ComponentClass<P>;
18+
>createComponentClass : <P>(factory: () => React.ComponentClass<P>) => React.ComponentClass<P>
19+
>P : P
20+
>factory : () => React.ComponentClass<P>
21+
>React : any
22+
>ComponentClass : React.ComponentClass<P>
23+
>P : P
24+
>React : any
25+
>ComponentClass : React.ComponentClass<P>
26+
>P : P
27+
28+
class Foo extends createComponentClass(() => class extends React.Component<{}, {}> {
29+
>Foo : Foo
30+
>createComponentClass(() => class extends React.Component<{}, {}> { render() { return <span>Hello, world!</span>; }}) : React.Component<{}, {}>
31+
>createComponentClass : <P>(factory: () => React.ComponentClass<P>) => React.ComponentClass<P>
32+
>() => class extends React.Component<{}, {}> { render() { return <span>Hello, world!</span>; }} : () => typeof (Anonymous class)
33+
>class extends React.Component<{}, {}> { render() { return <span>Hello, world!</span>; }} : typeof (Anonymous class)
34+
>React.Component : React.Component<{}, {}>
35+
>React : typeof React
36+
>Component : typeof React.Component
37+
38+
render() {
39+
>render : () => any
40+
41+
return <span>Hello, world!</span>;
42+
><span>Hello, world!</span> : any
43+
>span : any
44+
>span : any
45+
}
46+
}) {}
Collapse file
+12Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// @jsx: react
2+
// https://github.com/Microsoft/TypeScript/issues/13157
3+
declare namespace React {
4+
interface ComponentClass<P> { new (): Component<P, {}>; }
5+
class Component<A, B> {}
6+
}
7+
declare function createComponentClass<P>(factory: () => React.ComponentClass<P>): React.ComponentClass<P>;
8+
class Foo extends createComponentClass(() => class extends React.Component<{}, {}> {
9+
render() {
10+
return <span>Hello, world!</span>;
11+
}
12+
}) {}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.