【发布时间】:2020-05-19 01:04:56
【问题描述】:
我正在尝试定义一个接受如下剩余属性的类型:
export type Base = {
numberProperty: number;
booleanProperty: boolean;
};
export type Residual = {
[key: string]: string;
};
export type Complete = Base & Residual;
const abc: Complete = {
numberProperty: 1234,
booleanProperty: true,
residualProperty: 'abc',
};
换句话说,我想确保numberProperty 和booleanProperty 始终分别为number 和boolean 类型,但任何其他属性都应为string。但是,在编译此(3.9.2)时,出现以下错误:
error TS2322: Type '{ numberProperty: number; booleanProperty: true; residualProperty: string; }' is not assignable to type 'Complete'.
Type '{ numberProperty: number; booleanProperty: true; residualProperty: string; }' is not assignable to type 'Residual'.
Property 'numberProperty' is incompatible with index signature.
Type 'number' is not assignable to type 'string'.
13 const abc: Complete = {
~~~
Found 1 error.
我发现了类似的问题和解决类似问题的文档,但我还没有找到关于如何执行此操作的结论性答案。
【问题讨论】:
-
您的
Residual使 base 中的任何定义完全无用,因为numberProperty和booleanProperty也是对象的键,也许您可以找到一种方法从 @987654332 中排除这些键@ 定义?虽然如果您可以简单地移动对象上定义其他属性的位置:)
标签: typescript