如何将项目JSON传入TypeScript库以生成对应MyType类型?
实现方案
当然可以实现,核心思路是利用TypeScript的泛型和模块导入类型特性,让你的库能接收任意项目的JSON类型并导出对应的精确结构类型。
具体实现步骤
1. 库的核心代码
在你的库中,不要直接固定导入某个JSON文件,而是通过泛型来接收外部传入的JSON类型,同时封装复用的逻辑:
// 库文件:json-type-utils.ts // 泛型工具类型,接收JSON数据类型并返回其结构类型 export type JsonType<T extends Record<string, any>> = T; // 封装复用的运行时操作逻辑 export function processJsonData<T extends Record<string, any>>(data: T) { // 这里编写你需要在多个项目复用的后续操作 return data; }
2. 项目中使用库
在各个项目里,导入自身的JSON文件,通过库的泛型类型生成对应结构的类型:
// 项目文件:app.ts import data from './mydata.json'; import { JsonType, processJsonData } from 'your-library-name'; // 生成与当前项目JSON完全匹配的类型 type MyType = JsonType<typeof data>; // 调用库中复用的运行时逻辑 const processedData = processJsonData(data);
简化写法(仅类型复用)
如果只需要复用类型推导逻辑,还可以进一步简化库的代码:
// 库文件:json-type-utils.ts export type MyType<T> = T;
项目中使用:
import data from './mydata.json'; import type { MyType } from 'your-library-name'; // 直接得到当前项目JSON对应的精确类型 type ProjectMyType = MyType<typeof data>;
这种方式下,ProjectMyType会完全继承项目中JSON文件的键结构和类型,和你之前直接写typeof data的效果完全一致,同时实现了逻辑的复用。
内容的提问来源于stack exchange,提问作者Bob Sheknowdas
相关产品推荐
相关产品推荐

