Powerpoint slides - North Shore .NET User Group

Download Report

Transcript Powerpoint slides - North Shore .NET User Group

North Shore .NET User Group

Our Sponsors

North Shore .NET User Group

Check out our new web site http://northshore.netusergroup.org.nz/ Next Meeting http://northshore.netusergroup.org.nz/Meeting/Meetup/?id=M20140327

Write JavaScript the way you really want to

About Us

• Andy • Mark • Aderant

Our Project

• Web based Case and ERP. Customisable by the customer • 67 KLOC script so far • • A large project (9+4+7=20 devs for 18-24 months) Quite a few grads, some with 3 years experience, 4ish seniors • Staff familiar with OO and C# • Knockout, Kendo UI, JQuery, MVC, Web API

Erich Gamma – Building a Large Scale JavaScript Application in TypeScript

TypeScript

• JavaScript for large applications • • A superset of JavaScript (you're already doing TypeScript!) (no big migrate) Optional Static Types, OO and Modules • Announced 2012, Anders Hejlsberg • Open source (written in TypeScript) • 'Javascript the good bits' - over 30% is what NOT to do, TypeScript helps

Advantages of TypeScript

• Easy to debug • ES6 now (classes, modules, lambdas) • • Produces clean idiomatic JavaScript Tools - VS 2012/2013, R#, Eclipse, Sublime, vi etc. etc.

• TSLint

Disadvantages

• Extra compile step (“Transpile”) • Source maps to debug, Personal preference is to debug JS • avoids TS evaluation and the this versus _this problems • Browser dev tools are JS environments not TS • Can't evaluate TS code, eg if it has types.

• ThirdParty .d.ts files, find them, sometimes correct them

Features. Don’t talk , demo.

• Type annotations • Lambdas (better this) • Compile time type checking • Enums • Interfaces (API, option bags, JSON, external libraries etc.) • Classes • Inheritance • Generics • Modules

Internal Modules

• Simple to get started • Implements module pattern • provides namespacing • can put entire application in one global • BUT • Open and too flexible • Can add to an internal module from any file • Leads to code organisation rot.

Simple Modules Demo

External Modules

• Supports AMD (Browser) and CommonJS (Node) • Common and easier syntax.

• Structured: 1 file = 1 module • Use 'export=' syntax to make consumption cleaner.

• Demo...

Bundling Modules

• Typescript compiler can bundle files.

• Not external modules.

• Can also use ASP.Net bundling - it's just JS • External Modules • Require Optimization tool can combine external modules • Creates a single minified JS file.

• Use require to get other JS modules on demand.

Definitely typed

• Types for 375+ libraries • Provides nice intellisense of 3rd party libraries, eg: • JQuery • knockout • Angular

Create Your Own Type Defs

• Aderant uses an oData query service • Model our data to produce: • nHibernate & Entity Framework maps • C# and Typescript DTO's • Show our query service type defs (demo) • Typescript meets oData (demo) • Generate type definitions from oData metadata.

• Why? Intellisense and compile time checking • Pick up typos early in the dev cycle

Debugging

• Browser dev tools are JS environments not TS • Can't evaluate TS code, eg if it has types. • Personal preference is to debug JS • Avoids TS evaluation and the this versus _this problems • Debugging in VS (Not us) • Demo Chrome & IE with source maps.

Unit Testing

• Initially we started writing our tests in Javascript • Now write all our Unit Tests in Typescript.

• Use QUnit, QUnit-promise, Mockjax.

• All these have type definitions available.

• Run unit tests on each CI build

Team Foundation Server

• Source Control • js, js.map, and .d.ts files not checked in.

• Builds • Typescript is compiled as part of Solution/Project • If not using MS Build one can use the NPM package • Grunt • etc.

Erich Gamma – Building a Large Scale JavaScript Application in TypeScript