对于可能很无聊的问题,我很抱歉,但我正在学习打字稿并且遇到了我无法克服的情况。
我使用组件接受传递类型数据的胜利DomainPropType
图表。所以我下载并安装了@types/victory来使用这种类型。
从那以后,可以将数据传递给组件。
但 ...
// unimportant code was striped out
import { DomainPropType } from 'victory';
class Charts extends Component<Props, State> {
private entireDomain: DomainPropType;
public constructor(props: Props) {
super(props);
this.entireDomain = this.getEntireDomain();
console.log(this.entireDomain); // <= got {x:[82800000, 1206000000] ,y: [0, 1]}
console.log(this.entireDomain.x); // <= got 'Property 'x' does not exist on type 'DomainPropType'.
}
public getEntireDomain(): DomainPropType {
const xValues = this.entireDataSet.map((item: DataSetItem) => item.x);
const yValues = this.entireDataSet.map((item: DataSetItem) => item.y);
return {
x: [xValues[0].valueOf(), xValues[xValues.length - 1].valueOf()],
y: [Math.min(...yValues), Math.max(...yValues)]
};
}
}
在第一个 console.log 中可以清楚地看到它entireDomain
是带有 key 的对象x
。那么为什么在第二个 console.log 中 typeScript 会抛出以下错误呢?
Property 'x' does not exist on type 'DomainPropType'.
Property 'x' does not exist on type '[number, number]'.
好的,它也说[number, number]
。然而,这就是类型的样子:
如果我理解正确... DomainPropType 也可以是 type { x?: DomainTuple; y: DomainTuple; }
。那为什么 typeScript 选择了错误的验证呢?请有人向我解释。