Skip to content
This repository was archived by the owner on Sep 21, 2019. It is now read-only.

Commit adc4eae

Browse files
committed
fix ts type mismatch
1 parent d42188a commit adc4eae

3 files changed

+56
-42
lines changed

src/transforms/collapse-intersection-interfaces-transform.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ export function collapseIntersectionInterfacesTransformFactoryFactory(
3535
helpers.isIntersectionTypeNode(node.type)
3636
&& node.type.types.every((type) => helpers.isTypeLiteralNode(type))
3737
) {
38-
const allMembers = node.type.types
39-
.map((type: ts.TypeLiteralNode) => type.members)
38+
const allMembers = (node.type.types as ts.NodeArray<ts.TypeLiteralNode>)
39+
.map((type) => type.members)
4040
.reduce((all, members) => ts.createNodeArray(all.concat(members)), ts.createNodeArray([]));
4141

4242
return ts.createTypeAliasDeclaration(

src/transforms/react-hoist-generics-transform.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,17 +42,17 @@ export function reactHoistGenericsTransformFactoryFactory(typeChecker: ts.TypeCh
4242
*/
4343
function hoist(reactClass: ts.ClassDeclaration, sourceFile: ts.SourceFile) {
4444
if (!reactClass.heritageClauses) {
45-
return reactClass;
45+
return sourceFile;
4646
}
4747
const className = reactClass && reactClass.name && reactClass.name.getText(sourceFile);
4848
const reactHeritageClauses = helpers.find(reactClass.heritageClauses, helpers.isReactHeritageClause);
4949

5050
if (reactHeritageClauses === undefined || !reactHeritageClauses.types == undefined) {
51-
return reactClass;
51+
return sourceFile;
5252
}
5353
const [reactType] = reactHeritageClauses.types;
5454
if (reactType.typeArguments === undefined || reactType.typeArguments.length < 2) {
55-
return reactClass;
55+
return sourceFile;
5656
}
5757

5858
const [propType, stateType] = reactType.typeArguments;

src/transforms/react-js-make-props-and-state-transform.ts

Lines changed: 51 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -41,25 +41,34 @@ function visitClassDeclaration(
4141
return classDeclaration;
4242
}
4343

44-
const firstHeritageClauses = classDeclaration.heritageClauses[0];
45-
const expressionWithTypeArguments = firstHeritageClauses.types[0];
46-
47-
firstHeritageClauses.types[0] = ts.updateExpressionWithTypeArguments(
48-
expressionWithTypeArguments,
49-
[
50-
getPropsTypeOfReactComponentClass(classDeclaration, sourceFile),
51-
getStateTypeOfReactComponentClass(classDeclaration, typeChecker),
52-
],
53-
expressionWithTypeArguments.expression,
54-
)
44+
const firstHeritageClause = classDeclaration.heritageClauses[0];
45+
46+
const newFirstHeritageClauseTypes = helpers.replaceItem(
47+
firstHeritageClause.types,
48+
firstHeritageClause.types[0],
49+
ts.updateExpressionWithTypeArguments(
50+
firstHeritageClause.types[0],
51+
[
52+
getPropsTypeOfReactComponentClass(classDeclaration, sourceFile),
53+
getStateTypeOfReactComponentClass(classDeclaration, typeChecker),
54+
],
55+
firstHeritageClause.types[0].expression,
56+
),
57+
);
58+
59+
const newHeritageClauses = helpers.replaceItem(
60+
classDeclaration.heritageClauses,
61+
firstHeritageClause,
62+
ts.updateHeritageClause(firstHeritageClause, newFirstHeritageClauseTypes),
63+
);
5564

5665
return ts.updateClassDeclaration(
5766
classDeclaration,
5867
classDeclaration.decorators,
5968
classDeclaration.modifiers,
6069
classDeclaration.name,
6170
classDeclaration.typeParameters,
62-
classDeclaration.heritageClauses,
71+
newHeritageClauses,
6372
classDeclaration.members,
6473
);
6574
}
@@ -228,39 +237,44 @@ function getStateLookingForSetStateCalls(
228237
* @param objectLiteral
229238
*/
230239
function buildInterfaceFromPropTypeObjectLiteral(objectLiteral: ts.ObjectLiteralExpression) {
231-
const resultObjectLiteral = objectLiteral.properties.reduce(
232-
(result, propertyAssignment: ts.PropertyAssignment) => {
240+
const members = objectLiteral.properties
241+
// We only need to process PropertyAssignment:
242+
// {
243+
// a: 123 // PropertyAssignment
244+
// }
245+
//
246+
// filter out:
247+
// {
248+
// a() {}, // MethodDeclaration
249+
// b, // ShorthandPropertyAssignment
250+
// ...c, // SpreadAssignment
251+
// get d() {}, // AccessorDeclaration
252+
// }
253+
.filter(ts.isPropertyAssignment)
254+
.filter(property => {
255+
return (
256+
// Ignore children, React types have it
257+
property.name.getText() !== 'children' &&
258+
ts.isPropertyAccessExpression(property.initializer)
259+
)
260+
})
261+
.map(propertyAssignment => {
233262
const name = propertyAssignment.name.getText();
234-
if (!helpers.isPropertyAccessExpression(propertyAssignment.initializer)) {
235-
console.warn('Bad value for propType', name, 'at', propertyAssignment.getStart());
236-
return result;
237-
}
238-
239-
// Ignore children, React types have it
240-
if (propertyAssignment.name.getText() === 'children') {
241-
return result;
242-
}
263+
// We have guarantee this in the previous `filter`
264+
const initializer = propertyAssignment.initializer as ts.PropertyAccessExpression
265+
const typeValue = getTypeFromReactPropTypeExpression(initializer);
266+
const isOptional = isPropTypeOptional(initializer);
243267

244-
// Ignore children, React types have it
245-
if (propertyAssignment.name.getText() === 'children') {
246-
return result;
247-
}
248-
249-
const typeValue = getTypeFromReactPropTypeExpression(propertyAssignment.initializer);
250-
const isOptional = isPropTypeOptional(propertyAssignment.initializer);
251-
const propertySignature = ts.createPropertySignature(
268+
return ts.createPropertySignature(
252269
[],
253270
name,
254-
isOptional ? ts.createToken(ts.SyntaxKind.QuestionToken): undefined,
271+
isOptional ? ts.createToken(ts.SyntaxKind.QuestionToken) : undefined,
255272
typeValue,
256273
undefined,
257274
);
258-
result.members.push(propertySignature)
259-
return result;
260-
}, ts.createTypeLiteralNode([]));
261-
275+
});
262276

263-
return resultObjectLiteral;
277+
return ts.createTypeLiteralNode(members)
264278
}
265279

266280
/**

0 commit comments

Comments
 (0)