ice-lab / ice-next

The repo was transferred to https://github.com/alibaba/ice
https://v3.ice.work/
MIT License
53 stars 7 forks source link

getConfig 类型提示 #570

Closed ClarkXia closed 2 years ago

ClarkXia commented 2 years ago

背景

getConfig 作为页面配置有 title / links / scripts 等能力,但随着 auth / pha / miniapp 等能力的加入,其配置能力也被拓展,可配置的内容越来约复杂,为了提升开发过程中的体验,期望可以有一种方式可以提供良好的类型提示

方案

支持 defineGetConfig 来定义页面配置:

import { defineGetConfig } from 'ice';
import type { RouteConfig } from 'ice';

export default function About() {
  const config = useConfig<RouteConfig>();
  console.log('config', config);

  return (
    <>
    </>
  );
}

export const getConfig = defineGetConfig(() => {
  return {};
});

通过 useConfig 消费时同样可以获取。

框架 API 需要提供扩展 getConfig 的方式,为了方便类型维护,需要通过指定类型文件的方式注册类型:

// types.ts
interface ConfigAuth {
  auth?: string[];
}

export ConfigAuth;
const plugin = () => ({
  setup({ generator }) => {
    generator.addRouteTypes({
      specifier: ['ConfigAuth'],
      type: true,
      source: '@ice/plugin-auth/esm/types',
    });
  }
});

export default plugin;