gpt4 book ai didi

从接口(interface)到递归类型的 Typescript 转换引发类型错误中缺少索引签名

转载 作者:行者123 更新时间:2023-12-04 07:15:05 25 4
gpt4 key购买 nike

Live Example
我定义了一个递归 SerializableRecord我在 recursive type references 的帮助下定义的接口(interface). 这个界面可以改 .

type Serializable =
| string
| number
| boolean
| null
| undefined
| SerializableArray
| SerializableRecord;

interface SerializableArray extends Array<Serializable> {}
interface SerializableRecord extends Record<string, Serializable> {}

我还有一个 进口 界面(这意味着我不能改变它):
interface ExternalInterface {
attr: string;
}
现在,如果我尝试执行以下操作,我会收到错误:
const x: ExternalInterface = {attr: 'a'};
const y: SerializableRecord = x;
// Throws a TS error: "Index signature is missing in type 'ExternalInterface'"

有没有办法让这两个实体兼容,而不引入 anyunknown ?

最佳答案

此行为目前是根据 this GitHub issue 设计的。 .
我所知道的最好的解决方法是将接口(interface)“转换”为一种类型:

type AsType<T> = { [P in keyof T]: T[P]; }

const x: ExternalInterface = {attr: 'a'};
const y: SerializableRecord = x as AsType<typeof x>;
另一种是使用对象传播语法,
const y: SerializableRecord = { ...x };
但这需要复制对象,您可能不想这样做。

关于从接口(interface)到递归类型的 Typescript 转换引发类型错误中缺少索引签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68816654/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com