An implementation of Pong written in TypeScript.
I've only confirmed that it works in Chrome, Firefox, and Safari. Ironically untested on IE.
Try it out here: http://sufianrhazi.github.io/typescript-pong
I've seen lots of talk about the benefits of typescript, and not many examples of actual complete products. This project was an exercise in learning typescript, evaluating its pros and cons, and providing a list of "gotchas" that aren't immediately clear from the language specification.
- Non-obvious benefits of typescript:
- Sanity while refactoring: with its strong typing, javascript actually becomes easy to modify.
- Enums are great, but they really have me wanting algebraic data types.
- Better code organization: using interfaces as much as possible leads to more decoupled OOP.
- Constructor property assignment removes silly boilerplate
Type annotations are optional; I wish you could make them mandatory with a compiler flag.Typescript 0.9.1 now has a "no implicit any" option.- I don't have windows installed, but I had no problem writing typescript.
- Developing in vim was okay. syntastic has a typescript plugin which marks compiler errors correctly. There isn't anything that appears to provide auto-complete.
The default declarations forDefinitelyTyped is really great.window
and other objects are lacking; notably missing are declarations for vendor-specific things likemozRequestAnimationFrame
or Web AudioAudioContext
.- The compiler is really, really slow.
- This should be more obvious: to "include" a file from another file, you must add a triple-slash xmlish comment:
///<reference path="include_me.ts"/>
- Compiled .js output has CRLFs
- Type annotations on function-keyword declared functions aren't consistent:
method: (fn: () => void) => void
vsfunction func(fn: () => void): void { ... }
vsvar funcvar: (fn: () => void) => void;
Run scons inside the repository, open pong.html
This repo uses git submodules, clone with git clone --recursive
or run git submodule update --init --recursive
.
This is released under the BSD-2-Clause license. See the LICENSE file.