更新问题 问题已经解决
更新问题
就是想实现这样一个ts
// 公共方法 单个文件 fn的参数和调用处的参数一致.可能有多个参数
type commonApi = (fn: (props: T) => object) => (props:T) => any
// 业务逻辑文件, 在这里指定泛型。 props为调用处参数, 需要有正确的提示
const result = commonApi ((props) => {
return {...props}
})
// 调用文件 把公共方法 和业务逻辑方法的返回值合并
result({a:1})
求大佬帮我看三种实现方式,都有问题,不晓得这么搞了
type IcommonField = {
readonly?: boolean,
required?: boolean,
title?: string,
value?: string
[key: string]: any
}
// 方式一
type IcommonApi<T> = {
<fn extends (props: T) => {data: object, [key:string]:unknown}>(props: fn): (props:T) => object // 这里的object我还想用自动推断返回结果 而不是写死 在这个里面还有其他逻辑
}
// 方式二
type IFn = <T>(props: T) => {data: object, [key:string]:unknown}
type IcommonApi<T> = {
<fn extends IFn>(props: fn): (props:T) => object // 这里的object我还想用自动推断返回结果 而不是写死 在这个里面还有其他逻辑
}
// 公共抽取部分 **突然感觉这里不对, 我不是要在这里指定泛型**
const commonApi:IcommonApi<IcommonField> = (fn) => (props) => {
const c = fn(props) as ReturnType<typeof fn>;
return {
...c,
s:1
}
}
// 方式三 我这样写能满足我最后自动推断的合并, 但是 这个公共的T, 这么搞?现在这样定义是错误的, 最好就是这种这么改改让最后的params 和result 都有正确的提示
const commonApi = <fn extends (props: T) => {data: object, [key:string]:unknown}>(fn: fn) => (props:T) => {
const c = fn(props) as ReturnType<typeof fn>;
return {
...c,
s:1
}
}
// 单个的业务逻辑 **我是要在这里 指定泛型才对**
const result = commonApi(function(params) {
// 用方式一 params 能正确提示
// 用方式二 params 无法提示
return {
data: {
c:1,
...params
}
}
})({value:'2'})