Skip to content
This repository has been archived by the owner on Jan 13, 2025. It is now read-only.

feat: Convert packages to TypeScript #4451

Merged
merged 74 commits into from
Feb 27, 2019
Merged
Changes from 1 commit
Commits
Show all changes
74 commits
Select commit Hold shift + click to select a range
8bcf546
feat(infrastructure): add tsconfig, tslint, and build setup (#4241)
Jan 18, 2019
1600b54
docs: Update closure-compiler.md to reflect TypeScript conversion (#4…
kfranqueiro Jan 18, 2019
66c8d81
feat(dom): Convert JS to TypeScript (#4269)
acdvorak Jan 19, 2019
87a5e8e
feat(animation): Convert JS to TypeScript (#4271)
acdvorak Jan 23, 2019
8addf4d
Merge remote-tracking branch 'origin' into feat/typescript
acdvorak Jan 23, 2019
6b958de
feat(linear-progress): Convert JS to TypeScript (#4272)
acdvorak Jan 23, 2019
c649de5
fix: add strict true to tsconfig (#4286)
Jan 24, 2019
47a9c38
feat(ripple): convert to ts (#4300)
Jan 29, 2019
54d25c1
Merge remote-tracking branch 'origin/master' into feat/typescript
Jan 31, 2019
aeb3f87
feat(form-field): ts convert (#4327)
Jan 31, 2019
8abbb53
Merge remote-tracking branch 'origin/master' into feat/typescript
acdvorak Jan 31, 2019
13d169d
feat(switch): Convert JS to TypeScript (#4320)
mmalerba Jan 31, 2019
869e44c
refactor(animation): Replace enums with string literal type aliases (…
acdvorak Jan 31, 2019
a2ac8bc
feat(menu-surface): Convert JS to TypeScript (#4273)
acdvorak Feb 5, 2019
0f8a271
Merge remote-tracking branch 'origin/master' into feat/typescript
acdvorak Feb 5, 2019
2befa88
feat(checkbox): typescript conversion (#4319)
Feb 5, 2019
90f5f05
feat(radio): ts conversion (#4329)
Feb 6, 2019
0f354ae
feat(base): Add generic type signatures to listen/unlisten/emit (#4358)
acdvorak Feb 6, 2019
f595a99
feat(icon-button): Convert to TypeScript (#4325)
abhiomkar Feb 6, 2019
0b28992
feat(list): ts conversion (#4334)
Feb 6, 2019
dc4e92c
feat(menu): Convert JS to TypeScript (#4342)
acdvorak Feb 6, 2019
33e26d7
feat(dialog): ts conversion (#4333)
Feb 7, 2019
3279cc9
style: Make TS import and export syntax consistent (#4360)
acdvorak Feb 7, 2019
1c7335b
feat(chips): ts conversion (#4332)
Feb 7, 2019
ed7f8d7
feat(grid-list): ts conversion (#4337)
Feb 7, 2019
d4250ca
docs: update best coding practices with typescript lessons learned (#…
Feb 7, 2019
9936f01
feat(ripple): updated ripple ts rewrite to remove extraneous code/typ…
Feb 7, 2019
77e8bab
Merge remote-tracking branch 'origin/master' into feat/typescript
acdvorak Feb 7, 2019
5407ada
feat(floating-label): Convert JS to TypeScript (#4374)
acdvorak Feb 8, 2019
50eb8c7
feat(line-ripple): Convert JS to TypeScript (#4373)
acdvorak Feb 8, 2019
197f7fe
feat(notched-outline): Convert JS to TypeScript (#4375)
acdvorak Feb 8, 2019
08fb283
feat(slider): Convert JS to TypeScript (#4378)
acdvorak Feb 8, 2019
e95ff8a
feat(snackbar): Convert JS to TypeScript (#4363)
acdvorak Feb 9, 2019
b859440
chore: Remove Object.assign from TS files (#4389)
acdvorak Feb 11, 2019
e8c947c
Merge branch 'master' into feat/typescript
acdvorak Feb 11, 2019
6fce645
Merge remote-tracking branch 'origin/master' into feat/typescript
acdvorak Feb 11, 2019
9526da2
Merge branch 'feat/typescript' of github.com:material-components/mate…
acdvorak Feb 11, 2019
667aeee
feat(tab-scroller): Convert JS to TypeScript (#4392)
acdvorak Feb 12, 2019
5f50d60
feat(tab-indicator): Convert JS to TypeScript (#4391)
acdvorak Feb 12, 2019
ab9879d
feat(tab): Convert JS to TypeScript (#4393)
acdvorak Feb 12, 2019
b2fa9a5
feat(tab-bar): Convert JS to TypeScript (#4394)
acdvorak Feb 12, 2019
976352c
feat(text-field): Convert JS to TypeScript (#4377)
acdvorak Feb 13, 2019
5052ada
feat(select): Convert JS to TypeScript (#4386)
acdvorak Feb 13, 2019
f8ba48f
feat(drawer): Convert JS to TypeScript (#4390)
acdvorak Feb 14, 2019
b8b1988
feat(top-app-bar): Convert JS to TypeScript (#4397)
acdvorak Feb 14, 2019
4675c95
feat(auto-init): Convert JS to TypeScript (#4395)
acdvorak Feb 14, 2019
6136db3
feat(toolbar): Convert JS to TypeScript (#4410)
acdvorak Feb 14, 2019
db6fc6d
Merge remote-tracking branch 'origin/master' into feat/typescript
acdvorak Feb 14, 2019
6d6bff8
WIP: Fix borked merge
acdvorak Feb 14, 2019
ebefb78
feat(package): Convert JS to TypeScript (#4396)
acdvorak Feb 14, 2019
ff5ad6a
chore: Fix broken TypeScript rewrite script (#4398)
acdvorak Feb 14, 2019
96afbb1
WIP: Remove `icon-toggle` from `npm run test:dependency`
acdvorak Feb 14, 2019
36ce7b9
WIP: Fix GitHub authentication issue for screenshot tests on Travis CI
acdvorak Feb 15, 2019
03b791d
fix(chips): Reference ripple/index in types for consistency (#4417)
kfranqueiro Feb 15, 2019
409a6a6
feat(tabs): Convert JS to TypeScript (#4412)
acdvorak Feb 15, 2019
1ec12b6
chore: remove icon-toggle (#4415)
Feb 15, 2019
72e8b66
refactor: Make TS easier to wrap (#4407)
acdvorak Feb 21, 2019
c487445
WIP: Add comment
acdvorak Feb 22, 2019
f441f8f
Merge remote-tracking branch 'origin/master' into feat/typescript
acdvorak Feb 22, 2019
cabeabc
chore(package): Remove need for selection-control (#4442)
kfranqueiro Feb 22, 2019
b6b6983
chore: Fix internal tslint errors (#4440)
acdvorak Feb 22, 2019
6faaabe
chore: Fix regression in `MDCChipFoundation.getDimensions()` (#4443)
acdvorak Feb 23, 2019
2bbcfea
WIP: Fix internal tslint error
acdvorak Feb 23, 2019
c6b609c
feat(infrastructure): add esmodules support for treeshaking (#4409)
Feb 26, 2019
ad96947
style: Add explanations to `tslint:disable` comments (#4448)
acdvorak Feb 26, 2019
21b2403
WIP: Update `.ts` file paths in READMEs
acdvorak Feb 26, 2019
c54310c
WIP: Export `MDCComponentClass` in `mdc-auto-init`
acdvorak Feb 26, 2019
cbb0fe6
WIP: Change `any` to `unknown` and remove `tslint:disable` comment
acdvorak Feb 26, 2019
f3a09a1
Merge remote-tracking branch 'origin/master' into feat/typescript
acdvorak Feb 26, 2019
216d975
WIP: Revert changes to logging
acdvorak Feb 20, 2019
d349fea
style: grammar mistakes on script comments (#4452)
Feb 26, 2019
8cd8b26
WIP autoinit: MDCComponentClass -> MDCAttachable
Feb 27, 2019
60c9498
WIP Remove object-assign polyfill
Feb 27, 2019
2abfb30
WIP Revert "WIP Remove object-assign polyfill"
Feb 27, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
docs: update best coding practices with typescript lessons learned (#…
  • Loading branch information
Matt Goo authored Feb 7, 2019
commit d4250cac82820d1ac651763ff7dd51a2ece23007
35 changes: 35 additions & 0 deletions docs/code/best_practices.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,38 @@ TODO: Add more notes about how to isolate subsystems from component specifics
* Use `requestAnimationFrame`
* Avoid constant synchronous DOM reads/writes
* Reduce the number of composite layers

### Typescript

#### Definite assignment operator
* MDC Web has other lifecycle methods (`initialize()` and `initSyncWithDom()`) that are not contained within the `constructor`.
* Typescript compiler cannot infer that the other methods are run in conjunction, and will throw an error on properties not defined.
* Feel free to use the `!` when you run into the error `<PROPERTY_NAME> has no initializer and is not definitely assigned in the constructor.`. ie.

```
private progress_!: number; // Assigned in init

init() {
this.progress_ = 0;
}
```

#### type vs. interface
* Prefer `interface` over `type` for defining types when possible.

#### any vs. unknown vs. {}
* Defer to using `unknown` over both `any` and `{}` types.

* If you must choose between `any` and `{}` defer to `{}`.

#### Events
* `@material/base` defines convenience types (`EventType` and `SpecificEventListener`) for working with events and event listeners.
* Prefer to type as `EventType` over `string` when you expect that the string will be a standard event name (e.g. `click`, `keydown`).
* Prefer to type as `SpecificEventListener` over `EventListener` when you know what type of event is being listened for (e.g. `SpecificEventHandler<'click'>`).

#### When to use Node/Element/HTMLElement
* `Node` is more generic than `Element`, while `Element` is more generic than `HTMLElement`.
* `Node` is mainly used for the document or comments/text.
* `Element` should be used when the type in question could be `HTMLElement`, `SVGElement`, or others.
* `HTMLElement` only pertains to DOM Elements such as `<a>`, `<li>`, `<div>` just to name a few.
* Use the most generic type that you think is possible during runtime.