TypeScript通用子类型

时间:2017-02-07 12:59:44

标签: typescript typescript-generics

是否可以将名称空间作为通用名称和后来的名称空间访问类型传递?我想实现这样的目标:

namespace Test {
  export type A = { ... }
  export type B = { ... }
}

type Gen<T> = (a: T.A, b: T.B) => void;

// using Gen<T>
let x: Gen<Test>;

1 个答案:

答案 0 :(得分:0)

我不确定我理解你,但如果我这样做,那么这个怎么样:

namespace Test {
    export const Result = {
        num: 3
    }

    export const Variables = {
        str: "string"
    }
}

interface MyNamespace<R, V> {
    Result: R;
    Variables: V;
}

function Gen<R, V>(namespace: MyNamespace<R, V>): void {}

Gen(Test);

code in playground

修改

您可以使用所需的query功能执行类似操作:

function query<R, V>(namespace: MyNamespace<R, V>, data: { query: any, variables?: V }): Array<R> {
    return [];    
}

// type of arr is { num: number; }[]
let arr = query(Test, { query: "query", variables: { str: "" } });

code in playground