打字稿:将打字稿接口转换为表示 json.stringify 之后的类型
Typescript: Converting typescript interface to a type that represents what it would be after a json.stringify
假设我有一个简单的界面:
interface Calendar {
dates: Date[]
add: () => {}
}
如果一个日历对象得到Json.stringified,类型就变成这样:
interface StringifiedCalendar {
dates: string[]
// Function would dissappear
}
有没有一种简单的方法可以轻松地将原始界面转换为字符串化版本?我的用例是 rest API 会字符串化对象,我想在不重写的情况下重用后端的原始类型定义。
这至少是部分解决方案。 playground上的小编还是报了jcal
有一个add
属性,但是如果有人试图用它作为方法,就报错
interface Calendar {
dates: Date[]
add: () => {}
}
type Jsonized<T> = T extends object ? {
[K in keyof T]:
T[K] extends Function ? never :
T[K] extends Date ? string :
T[K] extends number ? number :
T[K] extends string ? string :
Jsonized<T[K]>
} : T;
declare let jcal: Jsonized<Calendar>;
jcal.add();
假设我有一个简单的界面:
interface Calendar {
dates: Date[]
add: () => {}
}
如果一个日历对象得到Json.stringified,类型就变成这样:
interface StringifiedCalendar {
dates: string[]
// Function would dissappear
}
有没有一种简单的方法可以轻松地将原始界面转换为字符串化版本?我的用例是 rest API 会字符串化对象,我想在不重写的情况下重用后端的原始类型定义。
这至少是部分解决方案。 playground上的小编还是报了jcal
有一个add
属性,但是如果有人试图用它作为方法,就报错
interface Calendar {
dates: Date[]
add: () => {}
}
type Jsonized<T> = T extends object ? {
[K in keyof T]:
T[K] extends Function ? never :
T[K] extends Date ? string :
T[K] extends number ? number :
T[K] extends string ? string :
Jsonized<T[K]>
} : T;
declare let jcal: Jsonized<Calendar>;
jcal.add();