打字稿:具有所有基本属性并允许任何扩展名的类型

时间:2019-02-21 08:54:29

标签: typescript types extend

假设我有一个仅描述我感兴趣的字段的接口:

interface RestResponse {
    data: {
        name: string;
        value: number;
    }
    status: number;
}

我想将此接口用作实际REST响应的类型,该响应具有比上面更多的字段。例如:

const sampleResponse = {
    data: {
        name: 'cat',
        value: 64,
        description: 'the field I won't use anywhere'
    }
    status: 200,
    isSuccessful: true
}

问题是sampleResponse应该是什么类型? 我做不到:

const sampleResponse: RestResponse = { ... }

因为类型没有isSuccessfuldata.description之类的字段。

它是RestResponse的扩展。我希望它具有界面中指定的所有字段,但是不要介意有任何其他字段。


到目前为止,我尝试查看https://www.typescriptlang.org/docs/handbook/advanced-types.html,但找不到适用于此情况的任何内容。

1 个答案:

答案 0 :(得分:0)

您可以添加索引器,该索引器允许任何具有任何值的键

它看起来像这样:

interface RestResponse {
  data: { 
    name: string;
    value: number;
  } 
  status: number;
  [key: string]: any;
}

什么是类型索引器?

[key: string]: any是对象索引器。

[key: string]指定您可以将任何密钥添加到string类型的对象中

索引器后面的: any定义键的值应为any,并且由于any允许任何内容-您可以添加任何内容