3 category: JavaScript libraries
9 TypeScript is just like ES2015 with type-checking. All ES2015 (classes, etc) should work.
27 string[] /* or Array<string> */
28 [string, number] /* tuple */
30 string | null | undefined /* union */
32 never /* unreachable */
43 let c: Color = Color.Green
50 let isDone: boolean = false
54 function add (a: number, b: number): number {
58 // Return type is optional
59 function add (a: number, b: number) { ... }
66 let len: number = (input as string).length
67 let len: number = (<string> input).length /* not allowed in JSX */
72 function object(this: {a: number, b: number}, a: number, b: number) {
78 // this is used only for type declaration
80 // a has type {a: number, b: number}
89 function printLabel (options: { label: string }) {
90 console.log(options.label)
94 function getUser (): { name: string; age?: number } {
101 interface LabelOptions {
105 function printLabel(options: LabelOptions) { ... }
108 ### Optional properties
121 readonly name: string
129 [key: string]: Object[]
138 type Name = string | string[]
144 interface Colorful { ... }
146 interface Circle { ... }
148 type ColorfulCircle = Colorful & Circle;
154 interface User { ... }
156 function getUser(callback: (user: User) => any) { callback({...}) }
158 getUser(function (user: User) { ... })
168 constructor(x: number, y: number) {
180 class Point3D extends Point {...}
182 interface Colored {...}
184 class Pixel extends Point implements Colored {...}
187 #### Short fields initialisation
191 static instances = 0;
199 #### Fields which do not require initialisation
202 public someUselessValue!: number;
212 constructor(message: T) {
213 this.greeting = message
217 let greeter = new Greeter<string>('Hello, world')
223 export interface User { ... }
236 type Walls = Building['room']['walls']; // string[]
239 ## Keyof Type Operator
242 type Point = { x: number; y: number };
244 type P = keyof Point; // x | y
250 // SomeType extends OtherType ? TrueType : FalseType;
252 type ToArray<T> = T extends any ? T[] : never;
254 type StrArrOrNumArr = ToArray<string | number>; // string[] | number[]
260 type GetReturnType<T> = T extends (...args: unknown[]) => infer R
264 type Num = GetReturnType<() => number>; // number
268 type First<T extends Array<any>> = T extends [infer F, ...infer Rest] ? F : never;
270 type Str = First<['hello', 1, false]>; // 'hello'
276 const point = { x: 4, y: 2 }; // { x: number, y: number }
278 const literalPoint = { x: 4, y: 2 } as const; // { readonly x: 4, readonly y: 2 };
281 ## Template Literal Types
284 type SpaceChar = ' ' | '\n' | '\t';
286 type TrimLeft<S extends string> = S extends `${SpaceChar}${infer Rest}` ? TrimLeft<Rest> : S;
288 type Str = TrimLeft<' hello'>; // 'hello'