Skip to content
This repository was archived by the owner on Jan 11, 2023. It is now read-only.

Commit d870fd9

Browse files
authored
Merge pull request #2 from wdoug/update-deps
Update deps
2 parents 3b91d88 + e5f82be commit d870fd9

File tree

4 files changed

+1646
-458
lines changed

4 files changed

+1646
-458
lines changed

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ Transforms React code written in JavaScript to TypeScript.
88

99
## Features:
1010

11-
* Proxies `PropTypes` to `React.Component` generic type and removes PropTypes
12-
* Provides state typing for `React.Component` based on initial state and `setState()` calls in the component
13-
* Hoist large interfaces for props and state out of `React.Component<P, S>` into declared types
14-
* Convert functional components with `PropTypes` property to TypeScript and uses propTypes to generate function type declaration
11+
- Proxies `PropTypes` to `React.Component` generic type and removes PropTypes
12+
- Provides state typing for `React.Component` based on initial state and `setState()` calls in the component
13+
- Hoist large interfaces for props and state out of `React.Component<P, S>` into declared types
14+
- Convert functional components with `PropTypes` property to TypeScript and uses propTypes to generate function type declaration
1515

1616
## Example
1717

package.json

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,28 @@
1414
"clean": "rm -rf dist",
1515
"prebuild": "npm run clean",
1616
"build": "tsc --pretty",
17-
"precommit": "lint-staged",
18-
"prettier": "prettier --write *.{js,json,css,md,ts,tsx}"
17+
"prettier": "prettier --write \"**/*.{js,json,css,md,ts,tsx}\""
1918
},
2019
"jest": {
2120
"transform": {
2221
".ts": "<rootDir>/node_modules/ts-jest/preprocessor.js"
2322
},
2423
"testRegex": "(/tests/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$",
25-
"moduleFileExtensions": ["ts", "js"]
24+
"moduleFileExtensions": [
25+
"ts",
26+
"js"
27+
]
28+
},
29+
"husky": {
30+
"hooks": {
31+
"pre-commit": "lint-staged"
32+
}
2633
},
2734
"lint-staged": {
28-
"*.{js,json,css,md,ts,tsx}": ["node_modules/.bin/prettier --write", "git add"]
35+
"*.{js,json,css,md,ts,tsx}": [
36+
"prettier --write",
37+
"git add"
38+
]
2939
},
3040
"bin": "dist/cli.js",
3141
"author": "Mohsen Azimi <me@azimi.me>",
@@ -36,25 +46,25 @@
3646
"detect-indent": "^5.0.0",
3747
"glob": "^7.1.2",
3848
"lodash": "^4.17.10",
39-
"prettier": "^1.12.1",
40-
"typescript": "2.8.3"
49+
"prettier": "^1.18.2",
50+
"typescript": "3.6.3"
4151
},
4252
"devDependencies": {
4353
"@types/chalk": "^2.2.0",
4454
"@types/commander": "^2.9.1",
4555
"@types/detect-indent": "^5.0.0",
4656
"@types/glob": "^5.0.35",
47-
"@types/jest": "^22.2.3",
57+
"@types/jest": "^24.0.18",
4858
"@types/lodash": "^4.14.109",
49-
"@types/node": "^10.1.2",
50-
"@types/prettier": "^1.12.2",
59+
"@types/node": "^12.7.5",
60+
"@types/prettier": "^1.18.2",
5161
"@types/react": "^16.3.14",
5262
"dedent": "^0.7.0",
53-
"husky": "^0.14.3",
54-
"jest": "^22.4.4",
63+
"husky": "^3.0.5",
64+
"jest": "^24.9.0",
5565
"lint-staged": "^7.1.1",
5666
"ts-jest": "^22.4.6",
57-
"ts-node": "^6.0.3",
67+
"ts-node": "^8.3.0",
5868
"tslint": "^5.10.0"
5969
}
6070
}

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

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -191,8 +191,10 @@ function getInitialStateFromClassDeclaration(
191191

192192
if (initialStateMember && ts.isPropertyDeclaration(initialStateMember) && initialStateMember.initializer) {
193193
const type = typeChecker.getTypeAtLocation(initialStateMember.initializer)!;
194-
195-
return typeChecker.typeToTypeNode(type);
194+
const typeNode = typeChecker.typeToTypeNode(type);
195+
if (typeNode) {
196+
return typeNode;
197+
}
196198
}
197199

198200
// Initial state in constructor
@@ -207,7 +209,10 @@ function getInitialStateFromClassDeclaration(
207209
ts.isBinaryExpression(statement.expression) &&
208210
statement.expression.left.getText() === 'this.state'
209211
) {
210-
return typeChecker.typeToTypeNode(typeChecker.getTypeAtLocation(statement.expression.right));
212+
const typeNode = typeChecker.typeToTypeNode(typeChecker.getTypeAtLocation(statement.expression.right));
213+
if (typeNode) {
214+
return typeNode;
215+
}
211216
}
212217
}
213218
}
@@ -242,7 +247,10 @@ function getStateLookingForSetStateCalls(
242247
node.expression.expression.getText().match(/setState/)
243248
) {
244249
const type = typeChecker.getTypeAtLocation(node.expression.arguments[0]);
245-
typeNodes.push(typeChecker.typeToTypeNode(type));
250+
const typeNode = typeChecker.typeToTypeNode(type);
251+
if (typeNode) {
252+
typeNodes.push(typeNode);
253+
}
246254
}
247255
}
248256
}

0 commit comments

Comments
 (0)