-
-
Notifications
You must be signed in to change notification settings - Fork 4.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
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: |
tslint is going to be deprecated: |
e38d0db
to
289b539
Compare
src/sentry/static/sentry/app/views/organizationDiscover/aggregations/index.tsx
Outdated
Show resolved
Hide resolved
Uses withConfig HoC instead of connecting to the ConfigStore directly This is required for #13786
.eslintrc.js
Outdated
'@typescript-eslint/no-unused-vars': 'off', | ||
}, | ||
}, | ||
], |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@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
.eslintrc.js
Outdated
'@typescript-eslint/no-unused-vars': 'off', | ||
|
||
// https://github.com/yannickcr/eslint-plugin-react/issues/2066 | ||
'react/sort-comp': 'warn', |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Uses withConfig HoC instead of connecting to the ConfigStore directly This is required for #13786
This is required for getsentry#13786
66506af
to
aac7d03
Compare
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍 for errors on unused props
"@babel/runtime": "^7.0.0", | ||
"@sentry/browser": "^5.4.2", | ||
"@sentry/integrations": "^5.4.2", | ||
"@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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry for the late reply. I thought we need this since we do different stuff if you call
make 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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Gotcha, thanks for the explanation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I took the liberty to rebase this branch against master
, and looked through the PR.
Looks good to me 👍
@@ -6,7 +6,8 @@ | |||
"strict": true, | |||
"declaration": false, | |||
"declarationMap": false, | |||
"allowJs": true, | |||
"allowJs": false, | |||
"noImplicitAny": false, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@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
allowJs
to befalse
prevents the TypeScript engine from processing*.jsx
files and as well as inferring types of imported js code. This resolves cryptic proptype type issues for React components sourced in*.jsx
files . -
The implications of disabling
allowJs
means that imported modules from*.jsx
files are implied to have anany
type. Hence, we neednoImplicitAny
to befalse
.
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: