与泛型的动态接口

时间:2017-08-07 03:53:12

标签: typescript typescript-generics

我在这里简化了这个问题。

interface Identity{
    name: string;
}

另一个通用接口

interface State<T extends Identity>{
    [T.name] : StateContainer<T>
}

但这不会起作用,因为它会给出错误

  

找不到T

如果我尝试通过将其保留在函数内来生成它

function generate(c : Identity){
    interface State<T>{
        [c.name]: StateContainer<T>
    }
}

它说

  

接口中的计算属性名称必须直接引用内置符号。

我想要的输出是拥有动态界面。 State<Tenant>应该表现

interface State{
    'tenant': ....
}

1 个答案:

答案 0 :(得分:2)

您可以使用mapped types

type State<T extends Identity> = {
    [P in keyof T] : StateContainer<T>
}