请问如下的数据转换类的定义是否还可以进行优化,在泛型写入的时候进行提示?

结合gpt实现了一个数据类型转换的类如下:



type DataType1 = {
  name: string,
  age: number 
}

type DataType2 = {
  name: string,
  age: number,
  data: unknown 
}

type DataType3 = {
  name: string,
  age: number,
  data: unknown 
}


// === 定义数据转换类

type DataTransformer<TInput, TOutput> = (input: TInput) => TOutput;


type DataTransformerMap = {
  'DataType1ToDataType2': DataTransformer<DataType1, DataType2>;
  'DataType2ToDataType3': DataTransformer<DataType2, DataType3>;
  // 后续添加更多转换关系时,相应添加类型定义
};

const dataTransformers: DataTransformerMap = {
  'DataType1ToDataType2': (d1: DataType1): DataType2 => {
      const d2: DataType2 = {
         ...d1,
          // 根据实际情况补充或修改属性
      };
      return d2;
  },
  'DataType2ToDataType3': (d2: DataType2): DataType3 => {
      const d3: DataType3 = {
         ...d2,
          // 相应的转换逻辑
      };
      return d3;
  },
  // 继续添加更多类型转换函数
};

class DataConverter {
  transformData<T extends keyof typeof dataTransformers>(
      input: Parameters<typeof dataTransformers[T]>[0]
  ): ReturnType<typeof dataTransformers[T]> {
      return dataTransformers[T](input);
  }
}

// === 实际使用

const converter = new DataConverter();
const d1: DataType1 = {
  name: "",
  age: 0
};
const d2 = converter.transformData<"DataType1ToDataType2">(d1);
console.log(d2)

但是我觉得还有一点想要进行优化就是每次转换数据的时候,我需要输入转换的类型(<"DataType1ToDataType2">):

const d2 = converter.transformData<"DataType1ToDataType2">(d1);

请问是否还有方式可以进行优化呢,比如直接点就提示填入?

阅读 640
1 个回答
const dataTransformers = {
  DataType1ToDataType2: (d1: DataType1) => {
    const d2 = {
      ...d1,
      // 根据实际情况补充或修改属性
      data: {},
    };
    return d2;
  },
  DataType2ToDataType3: (d2: DataType2) => {
    const d3 = {
      ...d2,
      // 相应的转换逻辑
    };
    return d3;
  },
  // 继续添加更多类型转换函数
};
type DataType1 = {
  name: string;
  age: number;
};

type DataType2 = {
  name: string;
  age: number;
  data: number;
};

type DataType3 = {
  name: string;
  age: number;
  data: unknown;
};
class DataConverter {
  transformData(input: DataType2): DataType3;
  transformData(input: DataType1): DataType2;
  transformData(input: DataType1 | DataType2) {
    if ("data" in input) {
      const c = dataTransformers.DataType2ToDataType3(input);
      return c;
    } else {
      return dataTransformers.DataType1ToDataType2(input);
    }
  }
}
const converter = new DataConverter();
const d1 = {
  name: "",
  age: 0,
};
const d2 = converter.transformData(d1);

我觉得这才是你想要的吧?没必要手动传<"DataType1ToDataType2">吧?传入的参数就已经能判断出要执行哪个函数了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题