Skip to content

Commit

Permalink
Update typescript.md (rstacruz#1863)
Browse files Browse the repository at this point in the history
  • Loading branch information
JonghwanWon committed Oct 27, 2022
1 parent fac4d1e commit 6999e94
Showing 1 changed file with 76 additions and 5 deletions.
81 changes: 76 additions & 5 deletions typescript.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,25 @@ string
null
undefined

bigint
symbol

string[] /* or Array<string> */
[string, number] /* tuple */

string | null | undefined /* union */

never /* unreachable */
unknown
```

```ts
enum Color {Red, Green, Blue = 4}
enum Color {
Red,
Green,
Blue = 4
};

let c: Color = Color.Green
```

Expand Down Expand Up @@ -97,8 +106,8 @@ function printLabel(options: LabelOptions) { ... }

```ts
interface User {
name: string,
age?: number
name: string;
age?: number;
}
```

Expand All @@ -124,6 +133,16 @@ interface User {
type Name = string | string[]
```
### Intersection
```ts
interface Colorful { ... }

interface Circle { ... }

type ColorfulCircle = Colorful & Circle;
```

## Function types

```ts
Expand Down Expand Up @@ -204,10 +223,62 @@ export interface User { ... }
```ts
interface Building {
room: {
door: string,
walls: string[],
door: string;
walls: string[];
};
}

type Walls = Building['room']['walls']; // string[]
```

## Keyof Type Operator

```ts
type Point = { x: number; y: number };

type P = keyof Point; // x | y
```

## Conditinal Types

```ts
// SomeType extends OtherType ? TrueType : FalseType;

type ToArray<T> = T extends any ? T[] : never;

type StrArrOrNumArr = ToArray<string | number>; // string[] | number[]
```

### Inferring

```ts
type GetReturnType<T> = T extends (...args: unknown[]) => infer R
? R
: never;

type Num = GetReturnType<() => number>; // number
```

```ts
type First<T extends Array<any>> = T extends [infer F, ...infer Rest] ? F : never;

type Str = First<['hello', 1, false]>; // 'hello'
```

## Literal Type

```ts
const point = { x: 4, y: 2 }; // { x: number, y: number }

const literalPoint = { x: 4, y: 2 } as const; // { readonly x: 4, readonly y: 2 };
```

## Template Literal Types

```ts
type SpaceChar = ' ' | '\n' | '\t';

type TrimLeft<S extends string> = S extends `${SpaceChar}${infer Rest}` ? TrimLeft<Rest> : S;

type Str = TrimLeft<' hello'>; // 'hello'
```

0 comments on commit 6999e94

Please sign in to comment.