Uh oh!
There was an error while loading. Please reload this page.
feat(typescript): Add TypeScript compatibility - #13786
Conversation
At the time of this message, Typescript doesn't support optional chaining proposal (https://github.com/tc39/proposal-optional-chaining), which is stage 2 microsoft/TypeScript#16 . Some suggestions: |
dashed
commented
Jun 24, 2019
tslint is going to be deprecated: |
e38d0db to
289b539CompareUh oh!
There was an error while loading. Please reload this page.
Uses withConfig HoC instead of connecting to the ConfigStore directly This is required for #13786
| '@typescript-eslint/no-unused-vars': 'off', | ||
| }, | ||
| }, | ||
| ], |
There was a problem hiding this comment.
@typescript-eslint/no-unused-vars rule was causing issues for imported types. see: typescript-eslint/typescript-eslint#363
I've added this as per https://43081j.com/2019/02/using-eslint-with-typescript
There was a problem hiding this comment.
Uses withConfig HoC instead of connecting to the ConfigStore directly This is required for #13786
This is required for getsentry#13786
66506af to
aac7d03Compare| const type = SPECIAL_TAGS[tags.tags_key] || 'string'; | ||
| .filter((tag: TagData) => !HIDDEN_TAGS.includes(tag.tags_key)) | ||
| .map((tag: TagData) => { | ||
| const type = SPECIAL_TAGS[tag.tags_key] || 'string'; |
There was a problem hiding this comment.
This was a good bug, TypeScript made it immediately obvious
| @@ -409,7 +429,6 @@ export default class OrganizationDiscover extends React.Component { | |||
| isFetchingQuery={isFetchingQuery} | |||
| onUpdateField={this.updateField} | |||
| onRunQuery={this.runQuery} | |||
| onReset={this.reset} | |||
| "@sentry/typescript": "^5.3.0", | ||
| "@types/lodash": "^4.14.134", | ||
| "@types/react-dom": "^16.8.4", | ||
| "@types/moment-timezone": "^0.5.12", |
There was a problem hiding this comment.
@HazAT Do you know if/why these need to be dependencies? Would be really nice to move these to devDependencies?
There was a problem hiding this comment.
Sorry for the late reply. I thought we need this since we do different stuff if you callmake develop or yarn install.make develop apparently on installs dependencies whereby yarn install installs all.
So if you do a prod build it would fail because of missing types.
There was a problem hiding this comment.
Gotcha, thanks for the explanation
dashed
left a comment
There was a problem hiding this comment.
I took the liberty to rebase this branch against master, and looked through the PR.
Looks good to me 👍
| "declarationMap": false, | ||
| "allowJs": true, | ||
| "allowJs": false, | ||
| "noImplicitAny": false, |
There was a problem hiding this comment.
@HazAT@lynnagara There are issues with importing React components from *.jsx files, and I don't think redeclaring them as const FooBarAny: any = FooBar; is the right approach to migrate Sentry to TypeScript in the long-term.
Since this file is extending @sentry/typescript/tsconfig.json (https://github.com/getsentry/sentry-javascript/blob/5d670a7781b6e2144809c002e9332e2cc9dd239c/packages/typescript/tsconfig.json), I'm proposing to provide the following overrides that are specific for this project:
"allowJs": false,
"noImplicitAny": false,
The behavioural changes are as follows:
Setting
allowJsto befalseprevents the TypeScript engine from processing*.jsxfiles and as well as inferring types of imported js code. This resolves cryptic proptype type issues for React components sourced in*.jsxfiles .The implications of disabling
allowJsmeans that imported modules from*.jsxfiles are implied to have ananytype. Hence, we neednoImplicitAnyto befalse.
lynnagara
commented
Jul 19, 2019
Deployed to staging, everything looks fine |
* master: (25 commits) ref(onboarding): Fix install promprt URL (#14106) fix(app-platform): Allow GET requests for published apps (#14109) feat: Update Group.get_latest_event to use Snuba event (#14039) ref(onboarding): Rename wizardNew -> onboarding (#14104) feat(apm): Update props to address proptype warnings for new transaction attributes (SEN-800) (#14040) ref(ui): Move and codesplit `ProjectPlugins` (#13952) feat(typescript): Add TypeScript compatibility (#13786) ref(templates): Remove unused content block default (#14090) ref(less): Remove unused admin.less (#14097) ref(onobarding): Remove old onboarding experience (#14066) fix(ui) Fix missing conditions in tag bars (#14063) ref(suspect-commits): Add hook (#14057) ref(frontend): Segment frontend web urls (#14096) feat(suspect-commits): Add analytics events (#14080) feat(servicehooks): Update servicehook URLs (#14093) license: Remove license headers (#14095) ref(templates): Remove unused account_nav (#14091) fix: Disable transaction events in store (#14088) fix(InstallWizard): Fix exception when InstallWizard completed (#14092) ref(admin): Fix thrashing on stat charts (#14094) ...
This PR is intended to serve as a demonstration for how we could write TypeScript code in Sentry. It migrates the following code to TypeScript:
It depends on: