검색과 인쇄가 가능한 타입스크립트 참고자료입니다: 타입, 인터페이스, 제네릭, 유틸리티 타입, narrowing, 선언 파일, tsconfig까지. 무료입니다.

Basic types

14
let name: string = "Ada";
String type annotation
let age: number = 30;
Number (int and float)
let ok: boolean = true;
Boolean
let ids: number[] = [1, 2];
Array of numbers
let pair: [string, number] = ["a", 1];
Tuple: fixed-length typed array
let anything: unknown;
Safe any: must narrow before use
let loose: any;
Opts out of checking (avoid)
function log(): void {}
No return value
function fail(): never { throw new Error(); }
Never returns
let big: bigint = 9007199254740993n;
Arbitrary-precision integer
let id: string | null = null;
Nullable via union
const point = { x: 1 } as const;
Deep readonly literal types
enum Status { Active, Inactive }
Numeric enum
type Dir = "up" | "down";
String literal union (enum-lite)

Interfaces & type aliases

12
interface User { id: number; name: string; }
Object shape contract
type User = { id: number; name: string };
Type alias for a shape
interface User { nickname?: string; }
Optional property
interface User { readonly id: number; }
Property cannot be reassigned
interface Admin extends User { role: string; }
Interface inheritance
type Admin = User & { role: string };
Extend an alias via intersection
interface Dict { [key: string]: number; }
Index signature
interface Fn { (x: number): string; }
Callable interface
interface User { greet(): void; }
Method signature
interface Box<T> { value: T; }
Generic interface
interface Window { myGlobal: string; }
Declaration merging (augment)
type Point = Readonly<{ x: number }>;
Readonly wrapper on an alias

Unions, intersections & narrowing

12
type Id = string | number;
Union: one of several types
type Full = A & B;
Intersection: all members of both
if (typeof id === "string") { ... }
typeof narrowing
if (el instanceof HTMLElement) { ... }
instanceof narrowing
if ("radius" in shape) { ... }
in-operator narrowing
if (value != null) { ... }
Strip null AND undefined
switch (shape.kind) { case "circle": ... }
Discriminated union switch
type Shape = Circle | Square;
Discriminated union (kind field)
const x = cond ? a : b;
Result type is a union of both
user?.address?.city
Optional chaining
const name = input ?? "default";
Nullish coalescing
function assertNever(x: never): never { throw x; }
Exhaustiveness check helper

Generics

11
function first<T>(arr: T[]): T { return arr[0]; }
Generic function
first<string>(["a", "b"])
Explicit type argument
interface Box<T> { value: T; }
Generic interface
class Stack<T> { items: T[] = []; }
Generic class
type Pair<K, V> = { key: K; value: V };
Generic type alias
<T extends { id: number }>
Constrain the type parameter
<T, K extends keyof T>(obj: T, key: K): T[K]
Typed property access
<T = string>
Default type parameter
function wrap<const T>(v: T): T[]
const modifier keeps literals
type Flatten<T> = T extends Array<infer U> ? U : T;
Extract inner type with infer
const map = new Map<string, User>();
Generic built-in collections

Utility types

14
Partial<User>
All properties optional
Required<User>
All properties required
Readonly<User>
All properties readonly
Pick<User, "id" | "name">
Keep only the listed keys
Omit<User, "password">
Drop the listed keys
Record<string, number>
Object map of key to value type
Exclude<T, U>
Remove U members from union T
Extract<T, U>
Keep only U members of union T
NonNullable<T>
Strip null and undefined
ReturnType<typeof fn>
Type a function returns
Parameters<typeof fn>
Tuple of a function's params
Awaited<Promise<string>>
Unwrap promise type → string
InstanceType<typeof MyClass>
Instance type from a class
Uppercase<"id"> / Capitalize<"id">
String-literal case transforms

Functions & overloads

11
function add(a: number, b: number): number
Typed parameters and return
const add = (a: number, b: number) => a + b;
Arrow function (return inferred)
function log(msg: string, level?: string)
Optional parameter
function log(msg: string, level = "info")
Default parameter value
function sum(...nums: number[]): number
Rest parameters
type Handler = (e: Event) => void;
Function type alias
function get(id: number): User; function get(ids: number[]): User[]; function get(x: any): any { ... }
Overload signatures + one impl
function fn(this: HTMLElement, e: Event)
Typed this parameter
async function load(): Promise<User>
Async returns a Promise
function isUser(x: unknown): x is User
Type predicate return
const fn: typeof otherFn = ...;
Reuse another function's type

Classes

12
class User { constructor(public name: string) {} }
Parameter property shorthand
private secret: string;
Compile-time private member
#secret: string;
Runtime private field (ES)
protected id: number;
Visible to subclasses only
readonly createdAt = new Date();
Assign once, in ctor only
static create(): User { return new User(); }
Static factory method
class Admin extends User { ... }
Inheritance (use super())
class Api implements Fetcher { ... }
Implement an interface
abstract class Shape { abstract area(): number; }
Abstract base class
get fullName(): string { return ...; }
Getter accessor
override toString(): string { ... }
Explicit override (safer)
declare id: number;
Declare without initializing

Type guards & assertions

11
function isUser(x: unknown): x is User
Custom type guard
function assertUser(x: unknown): asserts x is User
Assertion function
function assertOk(x: unknown): asserts x
Assert truthy (non-null after)
const el = input as HTMLInputElement;
Type assertion (cast)
value!
Non-null assertion (careful!)
x as unknown as Y
Double assertion (last resort)
const roles = ["admin", "user"] as const;
Literal tuple via const assert
if (Array.isArray(value)) { ... }
Built-in array guard
satisfies Record<string, string>
Check shape, keep inference
typeof x === "object" && x !== null
Safe object check (null trap)
catch (e) { if (e instanceof Error) ... }
Narrow the unknown catch var

Mapped & conditional types

12
type Flags<T> = { [K in keyof T]: boolean };
Mapped type over keys
{ [K in keyof T]?: T[K] }
Add ? modifier (Partial)
{ [K in keyof T]-?: T[K] }
Remove ? modifier (Required)
{ readonly [K in keyof T]: T[K] }
Add readonly to all keys
{ -readonly [K in keyof T]: T[K] }
Strip readonly (Mutable)
{ [K in keyof T as `get${Capitalize<string & K>}`]: () => T[K] }
Key remapping with as
type IsString<T> = T extends string ? true : false;
Conditional type
T extends (infer U)[] ? U : never
infer inside a conditional
type Keys = keyof User;
Union of property names
type Value = User["name"];
Indexed access type
type Route = `/users/${number}`;
Template literal type
T extends any ? T[] : never
Distribute over union members

Modules & declaration files

12
export interface User { ... }
Named export
export default class Api { ... }
Default export
import { User } from "./user";
Named import
import type { User } from "./user";
Type-only import (erased)
export type { User };
Type-only re-export
import * as path from "node:path";
Namespace import
declare module "my-lib" { ... }
Type an untyped package
declare global { interface Window { ... } }
Augment global scope
declare const VERSION: string;
Ambient declaration (.d.ts)
export {};
Force a file to be a module
/// <reference types="node" />
Triple-slash type reference
npm i -D @types/lodash
Install community typings

tsconfig essentials

13
"strict": true
Enable all strict checks (do it)
"target": "ES2022"
Output JavaScript version
"module": "ESNext"
Emitted module system
"moduleResolution": "bundler"
Resolution for Vite/esbuild
"noEmit": true
Type-check only, no output
"esModuleInterop": true
Smooth CommonJS default imports
"skipLibCheck": true
Skip checking .d.ts files
"noUncheckedIndexedAccess": true
arr[i] becomes T | undefined
"paths": { "@/*": ["./src/*"] }
Import path aliases
"outDir": "./dist", "rootDir": "./src"
Output / source directories
"sourceMap": true, "declaration": true
Emit .map and .d.ts files
npx tsc --noEmit
CI type-check command
npx tsc --init
Generate a tsconfig.json

“:q”와 일치하는 항목이 없습니다.


타입스크립트 치트시트 소개

이 타입스크립트 치트시트는 타입 시스템을 검색 가능한 한 페이지로 정리했습니다: 기본 타입, 인터페이스와 타입 별칭, 유니온, 인터섹션과 narrowing, 제네릭, 내장 유틸리티 타입, 함수와 오버로드, 클래스, 타입 가드와 단언, 매핑 및 조건부 타입, 모듈과 선언 파일, 그리고 실제로 중요한 tsconfig 옵션까지 다룹니다.

일상적인 작업을 위해 작성되었습니다: 제네릭 제약의 정확한 형태, Pick, Omit, Record, ReturnType이 하는 일, 판별 유니온(discriminated union)이 어떻게 narrowing되는지, 캐스팅 대신 `satisfies`를 써야 할 때 등을 핸드북을 찾아보지 않고도 에디터에서 바로 확인할 수 있습니다.

이 그룹의 다른 치트시트와 마찬가지로 무료이며 클라이언트 측에서 동작합니다: 검색창으로 실시간으로 행을 필터링하고, 고정된 목차로 섹션을 이동하고, 클릭 한 번으로 스니펫을 복사하고, 책상에서 참고할 수 있도록 페이지를 인쇄할 수 있습니다.

타입스크립트 치트시트 사용 방법

  1. 시트를 열고 기본 타입과 제네릭부터 tsconfig 핵심까지 섹션을 훑어보세요.
  2. Partial, narrowing, satisfies 같은 키워드를 검색해 모든 행을 실시간으로 필터링하세요.
  3. 고급 타입 레벨 문법이 필요할 때는 유틸리티 타입이나 매핑 및 조건부 타입 섹션으로 이동하세요.
  4. 스니펫이나 복사 아이콘을 클릭해 타입스크립트 코드를 클립보드에 복사하세요.
  5. 전체 타입스크립트 참고자료를 종이로 보려면 인쇄를 사용하세요.

자주 묻는 질문

11개 섹션입니다: 기본 타입, 인터페이스와 타입 별칭, 유니온과 narrowing, 제네릭, 유틸리티 타입, 함수와 오버로드, 클래스, 타입 가드와 단언, 매핑 및 조건부 타입, 모듈과 선언 파일, tsconfig 핵심입니다.

네. 전용 섹션에서 Partial, Required, Readonly, Pick, Omit, Record, Exclude, Extract, ReturnType, Awaited 등을 한 줄 설명과 함께 다룹니다.

매우 그렇습니다. 별도 섹션에서 typeof와 instanceof narrowing, 판별 유니온, 사용자 정의 타입 프레디케이트, 단언 함수, 그리고 캐스팅과 `satisfies`의 차이를 보여줍니다.

네. 어느 행의 코드나 복사 아이콘을 클릭하면 바로 클립보드로 복사됩니다.

네, 완전히 무료이며 로그인 없이 브라우저에서 실행됩니다.


인기 검색어
타입스크립트 치트시트 타입스크립트 타입 타입스크립트 유틸리티 타입 타입스크립트 제네릭 타입스크립트 interface vs type tsconfig 옵션 타입스크립트 참고자료
도움이 필요하신가요?
이 도구에서 문제를 발견하셨나요? 저희 팀에 알려주세요.
문제 신고

이 무료 도구를 귀하의 웹사이트에 추가하세요: 아래 코드를 복사하여 붙여넣으세요.