Javascript 如何在TypeScript中的d.ts文件中创建通用接口

Javascript 如何在TypeScript中的d.ts文件中创建通用接口,javascript,typescript,typescript-typings,typescript-generics,Javascript,Typescript,Typescript Typings,Typescript Generics,我有一个声明类型的函数,它返回一个包含回调和对象的元组: const fn = <T, U>(a: T, b :U) => { const inner = (a: T, b: U): Promise<T> => { return Promise.resolve(a) } const obj: { a: T, b : U} = { a, b } return [inner, obj] } 可能的接口: con

我有一个声明类型的函数,它返回一个包含回调和对象的元组:

const fn = <T, U>(a: T, b :U) => {
    const inner = (a: T, b: U): Promise<T> => {
        return Promise.resolve(a)
    }

    const obj: { a: T, b : U} = { a, b }

    return [inner, obj]
}
可能的接口:

const fn: FuncInterface = (a, b) => {
    const inner = (a, b) => {
        return Promise.resolve(a)
    }

    const obj = { a, b }

    return [inner, obj]
}
type Tuple<T, U> = [(a: T, b: U) => Promise<T>, {a: T, b : U}]

interface FuncInterface {
    <T, U>(a: T, b: U): Tuple<T, U>
}
因为在这个例子中,
a
b
将是类型
any
,而不是泛型
T&U

,我认为这种“干净”的想法是无效的,在这种情况下,没有办法将类型与代码完全分开。虽然ts会神奇地推断出函数是泛型的,而a和b是类型T和U,但当您想要引用函数体中的泛型类型参数时,这种神奇就会失效。您也可以让推理处理内部参数,但前提是您愿意内联
内部
...
const inner = (a, b) => {
   return Promise.resolve(a)
}
...