【发布时间】:2020-03-10 03:18:45
【问题描述】:
我正在为表示 XML 元素的对象创建接口。我第一次看到的界面是这样的:
interface Mutation {
[attribute: string]: string;
children: Mutation[];
}
但是在编译这个的时候,TypeScript 出错了,告诉我Mutation[] 类型与string 类型冲突。所以,我想从[attribute: string]: string 中排除“children”属性:
interface Mutation {
[attribute: Exclude<string, "children">]: string;
children: Mutation[];
}
但是,这又报错了:索引签名参数类型不能是类型别名。考虑改写[attribute: string]: string | Mutation[]。当然,这与目标背道而驰!
只允许在[attribute: string] 中输入Mutation[] 并不太难,比如[attribute: string]: Mutation[] | string。但这意味着每当我访问 Mutation 上的属性(“children”除外)时,我需要明确指出该值将是一个字符串 - 如果我将“children”之外的属性设置为Mutations 的数组!
有什么方法可以确保接口中的所有(未知)属性都是一种类型,同时为特定(已知)属性设置例外?
【问题讨论】:
标签: typescript