ts怎么动态生成类型?

求助如何动态生成type ModuleName 和 type Service;然后让我在index.tsx中能方便的查看service的类型

user.ts:

import request from '../request';
import { sha256 } from 'js-sha256';
import { Payload } from '@/service/request';
/**
 * 用户相关接口请求
 */
const user = {
  // 登录
  login(param: Payload): Promise<any> {
    param.loginPwd = sha256(param.loginPwd);

    return request('/agri/pcweb/user/login', param, 'POST');
  }
};

export default user;

index.ts:

import { Payload } from '@/service/request';

const files = require.context('./module', false, /\.ts$/);

type ModuleName = 'user';

type Service = Record<ModuleName, {}>;

const service = <Service>{};

// type ModuleName = keyof typeof service;

files.keys().forEach((key: string) => {
  const fileName = key.replace(/(\.\/|\.ts)/g, '') as ModuleName;
  service[fileName] = files(key).default;
});

export default service;

index.tsx:

import service from '@/service';
import { Payload } from '@/service/request';

const LoginPage = () => {
    interface Values extends Payload {
      loginName: string;
      loginPwd: string;
    };

    const onLogin = async (values: Values) => 
    values._isMsg = false;
    values._loading = false;

    const resp = await service.user.login(values);
  };
}
阅读 3.1k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题