typescript - 如何用参数化类型递归替换打字稿原语
问题描述
type
或者interface
两者都可以工作。
interface example {
s: string;
o: {
t: string;
arrn: number[];
arr: {
u: string;
}[];
};
将转变为
interface transformed {
s: {
onChange: (v: string) => void;
};
o: {
t: {
onChange: (v: string) => void;
};
arrn: {
onChange: (v: number) => void;
}[];
arr: {
u: {
onChange: (v: number) => void;
};
}[];
};
这可能吗?
做这样的事情的方向是什么?
解决方案
我认为以下类型满足您的描述:
interface example {
s: string;
o: {
t: string;
arrn: number[];
arr: {
u: string;
}[];
};
}
type ReplacePrimitives<T> = T extends Record<any, any>
? { [K in keyof T]: ReplacePrimitives<T[K]> }
: { onChange: (value: T) => void };
type transformed = ReplacePrimitives<example>;
它递归地用您描述的对象替换所有原始值onChange
,留下记录和数组结构。
推荐阅读
- excel - Delete 2 columns based on cell value
- r - R and Export raster extent as esri shapefile
- javascript - What are the differences btwn 'load' event vs readystatechange 'complete' event?
- maven - 为什么 maven 在 exec-maven-plugin 中针对特定转储抛出错误
- function - 如何在 Julia v1.1 中编写输入多维数组的函数?
- c++ - 将 uint32_t 添加到不同命名空间中的队列时发生内存泄漏
- twitter-bootstrap - Problem generating repeated Bootstrap grid rows and columns with XSLT
- php - 警告:为 foreach() 提供的参数无效 - 我能解决这个问题吗?
- php - WordPress:如何将帖子类型循环到自定义仪表板菜单?
- python - 如何从我的 django 应用程序中制作 CMS?