lblblong/tarojs-router-next

【建议】toXXX()的返回类型,参照Params和Data一样,使用在toute.config.ts中定义的BackData类型

Closed this issue · 7 comments

clayzx commented

建议可以把toXXX()的返回类型定义在toute.config.ts中,如:BackData;
在生成的toXXX()方法上,使用toXXX<T = BackData>(),这样既可以使用默认定义在toute.config.ts中的BackData,又可以在特定场景下自己传入特定类型,不过不建议使用toXXX<特性类型>()这种,一般一个页面就定义一个返回类型。

老板,你觉得怎么呢?

clayzx commented

麻烦顺便也把Router.getParams()、Router.back()、Router.setBackResult()改成泛型方法吧,
这样在调用这几个方法的时候,也可以通过这样的方式来限定返回值的类型:
Router.getParam<Params>(...) Router.back<BackData>(...) Router.setBackResult<BackData>(...)

clayzx commented

对了,还有一个建议,最好把route.config.ts中定义的Params, Data, BackData加上页面的名称,
如:CardParams, CardData, CardBackData。
不然引用的时候,到处都是Params,Data,BackData;特别是一个组件或页面同时引入几个页面的类型的时候,傻傻分不清楚。

建议可以把toXXX()的返回类型定义在toute.config.ts中,如:BackData; 在生成的toXXX()方法上,使用toXXX<T = BackData>(),这样既可以使用默认定义在toute.config.ts中的BackData,又可以在特定场景下自己传入特定类型,不过不建议使用toXXX<特性类型>()这种,一般一个页面就定义一个返回类型。

老板,你觉得怎么呢?

这个是可以的

麻烦顺便也把Router.getParams()、Router.back()、Router.setBackResult()改成泛型方法吧, 这样在调用这几个方法的时候,也可以通过这样的方式来限定返回值的类型: Router.getParam<Params>(...) Router.back<BackData>(...) Router.setBackResult<BackData>(...)

getParams 可以设置泛型,另外两个也添加泛型定义感觉没什么意义

对了,还有一个建议,最好把route.config.ts中定义的Params, Data, BackData加上页面的名称, 如:CardParams, CardData, CardBackData。 不然引用的时候,到处都是Params,Data,BackData;特别是一个组件或页面同时引入几个页面的类型的时候,傻傻分不清楚。

在我实际的开发场景下,90%的时候参数的类型定义只在当前页面用到,如果有较少的在其他页面或组件用到的话,建议导入的时候设置别名:

import { Params as UserParams } from '../user/route.config.ts'

或者在 route.config.ts 中新增一个类型导出:

export type Params = {
  id: string
}
// 新增一个
export type UserParams = Params

BackData 和 getParam 的泛型加了

clayzx commented