콘텐츠로 이동

@gj-kit/format 레시피

각 코드 블록은 패키지 README에서 이미 타입 검사하는 public-contract 예제를 재사용합니다.

1. 명시적인 시간대로 timestamp 포맷하기

섹션 제목: “1. 명시적인 시간대로 timestamp 포맷하기”

화면마다 다른 기본값을 상속하지 않도록 timezone과 separator를 display 호출 옆에 둡니다.

완료 상태: 호출 위치에서 시간대와 구분자가 명시된 안정적인 표시 문자열을 만듭니다.

앱 소유 경계: 코드에서 시간대와 구분자를 선택하세요. 영속·운영 값에 기기 기본값을 물려주지 마세요.

import { formatDateTime } from '@gj-kit/format';
export const dateLabel = formatDateTime(Date.UTC(2026, 7, 26, 0, 0), {
timeZone: 'Asia/Seoul',
separator: '-',
});

2. 숨은 의미 없이 금액과 byte 포맷하기

섹션 제목: “2. 숨은 의미 없이 금액과 byte 포맷하기”

formatter가 정책을 추측하게 두지 말고 코드에서 통화와 0값 동작을 선택합니다.

두 @ts-expect-error 줄은 배포되는 dist/index.d.ts에 대해 strict + exactOptionalPropertyTypes로 검증한 결과입니다. fallback: null은 반환 타입을 딱 string | null 만큼만 넓힙니다.

import { formatBytes, formatDateTime, parseIsoInstant } from '@gj-kit/format';
declare const createdAt: string; // app-owned: an ISO string straight off the API
// @ts-expect-error 'GB' labels a decimal divisor, but 'binary' divides by 1024.
formatBytes(1, { system: 'binary', maxUnit: 'GB', unitSpace: true, nonPositive: 'render' });
// @ts-expect-error a wall-clock string never reaches a formatter — parse it first.
formatDateTime(createdAt, { timeZone: 'Asia/Seoul', separator: '-' });
const instant = parseIsoInstant(createdAt, { assumeNoOffset: 'utc' });
export const stamp: string = formatDateTime(instant, { timeZone: 'Asia/Seoul', separator: '-' });
// fallback widens the return type by exactly what you passed, and nothing more.
export const sizeChip: string | null = formatBytes(0, {
system: 'decimal', unitSpace: false, nonPositive: 'fallback', fallback: null,
});

전체 API reference에서 모든 export와 import path를 확인하세요.