200 likes | 299 Views
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
E N D
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
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 Larger 200 kLOC Components API Dependency Injection 100% Typescript Small 50 kLOC Modules Classes Promises 10% Typescript Medium 100 kLOC “AMD” Lazy Loaded Contributions 50% Typescript size patterns TypeScript 2011 2012 2013
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) • 'Javascriptthe good bits' - over 30% is what NOT to do, TypeScripthelps
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.
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 Larger 200 kLOC Components API Dependency Injection 100% Typescript Small 50 kLOC Modules Classes Promises 10% Typescript Medium 100 kLOC “AMD” Lazy Loaded Contributions 50% Typescript size patterns TypeScript 2011 2012 2013