首页 > 解决方案 > 现有类型的 JSON 版本的实用程序类型?JSON

问题描述

是否存在任何实用程序类型可以做到这一点?

const foo: Foo = { ... }
const bar: string = JSON.stringify(foo)
const baz: JSON<Foo> = JSON.parse(foo)

JSON<Foo>将具有与 相同的所有属性Foo,但具有所做的所有更改JSON.stringify

标签: jsontypescript

解决方案


看起来这几乎就是我一直在寻找的东西 https://github.com/microsoft/TypeScript/issues/1897

type Json =
  | null
  | boolean
  | number
  | string
  | Json[]
  | { [prop: string]: Json };

type JsonCompatible<T> = {
  [P in keyof T]: T[P] extends Json
    ? T[P]
    : Pick<T, P> extends Required<Pick<T, P>>
    ? never
    : T[P] extends (() => any) | undefined
    ? never
    : JsonCompatible<T[P]>;
};

推荐阅读