我有以下接口:
export interface Meta {
counter: number;
limit: number;
offset: number;
total: number;
}
export interface Api<T> {
[key: string]: T[];
meta: Meta; // error
}
Run Code Online (Sandbox Code Playgroud)
目前,我收到以下错误:
'Meta'类型的属性'meta'不能赋予字符串索引类型'T []'.
搜索了一下之后,我在TS文档中找到了这个声明:
虽然字符串索引签名是描述"字典"模式的有效方式,但它们还强制所有属性都与其返回类型匹配.这是因为字符串索引声明obj.property也可用作obj ["property"].
这是否意味着当我有一个字符串索引签名时,我不能没有匹配此类型的任何其他变量?
实际上我可以摆脱这个错误声明这样的界面:
export interface Api<T> {
[key: string]: any; // used any here
meta: Meta;
}
Run Code Online (Sandbox Code Playgroud)
这样做,我失去了类型推断的完全能力.没有这种丑陋的方式,有没有办法做到这一点?
现有的 JavaScript 代码有“记录”,其中 id 是数字,其他属性是字符串。尝试定义这种类型:
type t = {
id: number;
[key:string]: string
}
Run Code Online (Sandbox Code Playgroud)
给出错误 2411 id 类型编号无法分配给字符串