Typescript:具有所有基本属性并允许任何扩展的类型
Typescript: type that has all the base attributes and allows any extensions
假设我有一个仅描述我感兴趣的字段的界面:
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 = { ... }
因为该类型没有 isSuccessful
和 data.description
等字段。
它是 RestResponse
的扩展。我希望它具有界面中指定的所有字段,但不介意有任何其他字段。
到目前为止,我尝试查看 https://www.typescriptlang.org/docs/handbook/advanced-types.html,但找不到对这种情况有用的内容。
您可以添加一个索引器,它允许任何键和任何值
看起来像这样:
interface RestResponse {
data: {
name: string;
value: number;
}
status: number;
[key: string]: any;
}
什么是类型索引器?
[key: string]: any
是对象索引器。
[key: string]
指定您可以将任何键添加到类型为 string
的对象
索引器之后的 : any
定义了键的值应该是 any
并且因为 any
允许任何东西 - 你可以添加任何东西
假设我有一个仅描述我感兴趣的字段的界面:
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 = { ... }
因为该类型没有 isSuccessful
和 data.description
等字段。
它是 RestResponse
的扩展。我希望它具有界面中指定的所有字段,但不介意有任何其他字段。
到目前为止,我尝试查看 https://www.typescriptlang.org/docs/handbook/advanced-types.html,但找不到对这种情况有用的内容。
您可以添加一个索引器,它允许任何键和任何值
看起来像这样:
interface RestResponse {
data: {
name: string;
value: number;
}
status: number;
[key: string]: any;
}
什么是类型索引器?
[key: string]: any
是对象索引器。
[key: string]
指定您可以将任何键添加到类型为 string
索引器之后的 : any
定义了键的值应该是 any
并且因为 any
允许任何东西 - 你可以添加任何东西