본문으로 건너뛰기

JSON을 Sarcastic 타입으로 변환 — Numio

JSON 샘플로 런타임 타입 검사 라이브러리 sarcastic용 검사기를 생성합니다. 객체는 is.shape({...}), 배열은 is.arrayOf(...)가 되고, 배열의 일부 항목에만 있는 키는 is.maybe(...)로 감쌉니다.

스키마 라이브러리 없는 작은 JavaScript 프로젝트에서 가져온 JSON의 구조를 런타임에 검사합니다.

JSON

Sarcastic

이럴 때 사용하세요

  • 스키마 라이브러리 없는 작은 JavaScript 프로젝트에서 가져온 JSON의 구조를 런타임에 검사합니다.
  • 예상치 못한 데이터에서 예외를 던지는 단언으로 설정이나 메시지 페이로드를 보호합니다.

사용 방법

  1. JSON 객체를 붙여 넣습니다. 필드를 선택적으로 표시하려면 그 필드가 있는 배열 항목과 없는 항목을 포함하세요.
  2. 출력을 확인합니다. 루트 shape는 RootInterface이고 중첩 shape는 키 이름을 따릅니다(posts는 Posts가 됨).
  3. 코드를 복사하고 is(data, RootInterface)로 데이터를 검증합니다. 일치하면 값을 반환하고 일치하지 않으면 예외를 던집니다.

JSON 입력

{
  "id": 1,
  "name": "Ada",
  "nickname": null,
  "tags": ["math"],
  "posts": [
    { "title": "Notes", "draft": true },
    { "title": "Engine" }
  ]
}

Sarcastic 검사기

import is from "sarcastic"

const anyValue = (value) => value

const Posts = is.shape({
  title: is.string,
  draft: is.maybe(is.boolean),
})

const RootInterface = is.shape({
  id: is.number,
  name: is.string,
  nickname: is.maybe(anyValue),
  tags: is.arrayOf(is.string),
  posts: is.arrayOf(Posts),
})

세부 정보 및 제한 사항

사이트 자체 생성기로 브라우저에서 생성되며, import is from "sarcastic"이 추가되고 Prettier로 정리됩니다. 서버 요청은 없습니다.

sarcastic에는 "any" 단언이 없으므로 항상 null인 값은 is.maybe(anyValue)가 되고, 출력에 작은 헬퍼 const anyValue = (value) => value가 추가됩니다.

정수와 소수 모두 is.number입니다. 빈 배열은 is.array가 되고, 혼합 배열은 is.arrayOf(is.either(is.number, is.string))처럼 is.either를 씁니다.

shape는 이를 사용하는 shape보다 먼저 선언되므로 붙여 넣은 그대로 실행됩니다.

FAQ

선택적 필드는 어떻게 표현되나요?

같은 배열의 일부 객체에서 빠졌거나 null인 키는 is.maybe(...)로 감싸며, null과 undefined를 허용합니다. 단일 객체의 최상위 키는 항상 필수입니다.

루트가 배열이면 어떻게 되나요?

항목이 요소 하나를 나타내는 RootInterface shape로 병합되고, 배열 전체를 위한 const RootInterfaceList = is.arrayOf(RootInterface)가 추가됩니다.

sarcastic은 io-ts나 Zod와 같은 것인가요?

아니요. sarcastic은 정적 타입 추론이 없는 더 작은 라이브러리입니다. TypeScript 타입도 필요하다면 JSON to Zod나 JSON to io-ts 페이지가 더 가깝습니다.

사양 및 참고 자료