具有动态和静态属性的接口

时间:2020-03-31 15:42:50

标签: typescript

我有一个问题,涉及一种更动态的界面,其中动态属性和静态属性可以一起使用-即使它们是不同的类型。这可能吗?如果是,那有什么意义吗?

假设我想要这样的东西。

type MyCustomType = {
    foo: string;
};

export interface MyInterface {
    [key: string]: MyCustomType;
    bar: string;
};

我想确保某个道具(我事先不知道名字)指向类型为MyCustomType的值。我确实知道MyInterface中其余的属性的名称,并且它们指向其他类型。

上面的代码导致以下错误:

Property 'bar' of type 'string' is not assignable to string index type MyCustomType.

我可以使用交叉点(如下例)any来解决这个问题,这也会影响我的动态道具并破坏其类型。

export interface MyInterface {
    [key: string]: MyCustomType | string;
    bar: string;
};

任何建议都非常感激:)

1 个答案:

答案 0 :(得分:3)

可以使用交点通过以下方式完成此操作:

type MyCustomType = {
    foo: string;
};

type MyInterface = {
    [key: string]: MyCustomType;
} & { bar: string };

为了使交叉口正常工作,MyInterface必须是一种类型。