3 category: JavaScript libraries
6 TypeScript is just like ES2015 with type-checking. All ES2015 (classes, etc) should work.
24 string[] /* or Array<string> */
25 [string, number] /* tuple */
27 string | null | undefined /* union */
29 never /* unreachable */
40 let c: Color = Color.Green
47 let isDone: boolean = false
51 function add (a: number, b: number): number {
55 // Return type is optional
56 function add (a: number, b: number) { ... }
63 let len: number = (input as string).length
64 let len: number = (<string> input).length /* not allowed in JSX */
69 function object(this: {a: number, b: number}, a: number, b: number) {
75 // this is used only for type declaration
77 // a has type {a: number, b: number}
86 function printLabel (options: { label: string }) {
87 console.log(options.label)
91 function getUser (): { name: string; age?: number } {
98 interface LabelOptions {
102 function printLabel(options: LabelOptions) { ... }
105 ### Optional properties
118 readonly name: string
126 [key: string]: Object[]
133 type Name = string | string[]
139 interface Colorful { ... }
141 interface Circle { ... }
143 type ColorfulCircle = Colorful & Circle;
149 interface User { ... }
151 function getUser(callback: (user: User) => any) { callback({...}) }
153 getUser(function (user: User) { ... })
163 constructor(x: number, y: number) {
175 class Point3D extends Point {...}
177 interface Colored {...}
179 class Pixel extends Point implements Colored {...}
182 #### Short fields initialisation
186 static instances = 0;
194 #### Fields which do not require initialisation
197 public someUselessValue!: number;
207 constructor(message: T) {
208 this.greeting = message
212 let greeter = new Greeter<string>('Hello, world')
218 export interface User { ... }
231 type Walls = Building['room']['walls']; // string[]
234 ## Keyof Type Operator
237 type Point = { x: number; y: number };
239 type P = keyof Point; // x | y
245 // SomeType extends OtherType ? TrueType : FalseType;
247 type ToArray<T> = T extends any ? T[] : never;
249 type StrArrOrNumArr = ToArray<string | number>; // string[] | number[]
255 type GetReturnType<T> = T extends (...args: unknown[]) => infer R
259 type Num = GetReturnType<() => number>; // number
263 type First<T extends Array<any>> = T extends [infer F, ...infer Rest] ? F : never;
265 type Str = First<['hello', 1, false]>; // 'hello'
271 const point = { x: 4, y: 2 }; // { x: number, y: number }
273 const literalPoint = { x: 4, y: 2 } as const; // { readonly x: 4, readonly y: 2 };
276 ## Template Literal Types
279 type SpaceChar = ' ' | '\n' | '\t';
281 type TrimLeft<S extends string> = S extends `${SpaceChar}${infer Rest}` ? TrimLeft<Rest> : S;
283 type Str = TrimLeft<' hello'>; // 'hello'