Slide 1

Slide 1 text

The Bad Cop Good

Slide 2

Slide 2 text

Who am I? @cassilup • CJ Jan ‘17 • The Good Cop definition?

Slide 3

Slide 3 text

Who am I? @cassilup • CJ Jan ‘17 •

Slide 4

Slide 4 text

TypeScript @cassilup • CJ Jan ‘17 • 1. What 2. How

Slide 5

Slide 5 text

Language for application scale JS development. (aka, Superset of JS) What is this sorcery TypeScript? @cassilup • CJ Jan ‘17 •

Slide 6

Slide 6 text

@cassilup • CJ Jan ‘17 • What is TypeScript?

Slide 7

Slide 7 text

Language for application scale JS development. (aka, Superset of JS) @cassilup • CJ Jan ‘17 • Types Classes Modules What is TypeScript?

Slide 8

Slide 8 text

Language for application scale JS development. (aka, Superset of JS) @cassilup • CJ Jan ‘17 • Types Classes Modules What is TypeScript?

Slide 9

Slide 9 text

Superset of JS Types: the missing spice • ES4, AS3 @cassilup • CJ Jan ‘17 • What is TypeScript?

Slide 10

Slide 10 text

@cassilup • CJ Jan ‘17 • What is TypeScript?

Slide 11

Slide 11 text

@cassilup • CJ Jan ‘17 • ES4 What is TypeScript?

Slide 12

Slide 12 text

@cassilup • CJ Jan ‘17 • ES4 2012 What is TypeScript?

Slide 13

Slide 13 text

@cassilup • CJ Jan ‘17 • http://www-archive.mozilla.org/js/language/old-es4/libraries/types.html What is TypeScript?

Slide 14

Slide 14 text

Superset of JS Types: the missing spice™ • ES4, AS3 Transpiler (tsc), NPM Package @cassilup • CJ Jan ‘17 • What is TypeScript?

Slide 15

Slide 15 text

@cassilup • CJ Jan ‘17 • * Shout out to Yarn. We <3 you!

Slide 16

Slide 16 text

Superset of JS Types: the missing spice™ • ES4, AS3 Transpiler (tsc), NPM Package Primitive types, interfaces • Static analysis, Refactoring, Autocomplete @cassilup • CJ Jan ‘17 • What is TypeScript?

Slide 17

Slide 17 text

: number : string : boolean : Object : : Function : () => {} @cassilup • CJ Jan ‘17 • Primitive Types

Slide 18

Slide 18 text

: number : string : boolean : Object : : Function : () => {} : any @cassilup • CJ Jan ‘17 • Primitive Types

Slide 19

Slide 19 text

@cassilup • CJ Jan ‘17 • Primitive Types If “everything is an object,” everything is an :any.

Slide 20

Slide 20 text

● Why good/bad cop? ● It guards. ● It warns. ● It fines. (Or it doesn’t.) You configure it. (tsconfig.json) ● It speeds you up. @cassilup • CJ Jan ‘17 • What is TypeScript?

Slide 21

Slide 21 text

● Why good/bad cop? ● It guards. ● It warns. ● It fines. (Or it doesn’t.) You configure it. (tsconfig.json) ● It speeds you up. @cassilup • CJ Jan ‘17 • ● It validates your code against definition files. ● All JS code is valid TS code. ● Future is now. (Future versions can be used now etc.) ● Can be adopted progressively. What is TypeScript?

Slide 22

Slide 22 text

Demo Time @cassilup • CJ Jan ‘17 • https://github.com/cassilup/ts-the-good-cop

Slide 23

Slide 23 text

TypeScript @cassilup • CJ Jan ‘17 • 1. What 2. How

Slide 24

Slide 24 text

Why use TypeScript? ● Documentation (Move things from your memory into actual code.) ● Static code analysis, Autocomplete ● Immediate error-spotting ● Safety-net ● It only affects development. @cassilup • CJ Jan ‘17 •

Slide 25

Slide 25 text

● Angular 2 (or, you know, 4) ● React ● Swagger ● Good transpiler (tsc) ● Big/distributed project/team Why use TypeScript? @cassilup • CJ Jan ‘17 • ● Documentation (Move things from your memory into actual code.) ● Static code analysis, Autocomplete ● Immediate error-spotting ● Safety-net ● It only affects development.

Slide 26

Slide 26 text

● Culture clash (JS loosely typed by nature) ● May cause overhead (maintaining .d.ts) ● 3rd Party Lib Definitions (The real problem with TypeScript) ● React props can be a pain. ● Configuration (Webpack) ● Sometimes feels like a blocker instead of an enabler. Why not use TypeScript? @cassilup • CJ Jan ‘17 •

Slide 27

Slide 27 text

What’s it like IRL @cassilup • CJ Jan ‘17 •

Slide 28

Slide 28 text

● 2 types of devs (backend vs. frontend) ● IDE vs. Code Editor. (Atom / VSCode / IntelliJ / ) (Lesson: “Never learn the shortcuts, always master the raw and then use the shortcuts.”) ● Starting from scratch is nice. TSX is lovely. ● Migrating (ng1) is a pain. The tale of 1k failing unit tests. ● Going all-in means CSS Modules. (Typed CSS Modules, that is.) What’s it like IRL @cassilup • CJ Jan ‘17 •

Slide 29

Slide 29 text

● Support/community is ok(ish) ● Careful with Versions 1 vs 2. (typings.json vs @types) ● allowImplicitAny, aka how to drive your UI team mad. @cassilup • CJ Jan ‘17 • What’s it like IRL (continued)

Slide 30

Slide 30 text

It's a language. But one that just helps JS. Don't let it scare you and don't let it get in your way. You control the degree to which you want it to interfere. You might need it or you might not. Think before you choose. If you’re happy and you know it without types, there’s no need to switch. @cassilup • CJ Jan ‘17 • Conclusion

Slide 31

Slide 31 text

Questions? @cassilup • CJ Jan ‘17 •

Slide 32

Slide 32 text

Thank you! @cassilup • CJ Jan ‘17 • p.s. Keep in touch.

Slide 33

Slide 33 text

● https://www.typescriptlang.org/ ● https://www.wikiwand.com/en/ECMAScript ● https://www.npmjs.com/package/typescript ● https://medium.com/javascript-scene/the-shocking-secret-about-static-types-514d39bf30a3#.7pcgrz7pi ● https://blog.mariusschulz.com/2017/01/13/typescript-vs-flow ● https://medium.com/js-dojo/react-or-vue-which-javascript-ui-library-should-you-be-using-543a383608d ● https://www.typescriptlang.org ● https://m.alphasights.com/css-evolution-from-css-sass-bem-css-modules-to-styled-components-d4c1da3a659b #.ndkmrf4ql @cassilup • CJ Jan ‘17 • Reference