我有:
interface Data {
[key: string]: number
}
interface MetaData {
date: Date
}
export type Datapoint = MetaData & Data
到目前为止一切顺利。当我需要制作其中一个时,问题出现了:
const d: Datapoint = {date: new Date()}
-> error TS2322: Type '{ date: Date; }' is not assignable to type 'Datapoint'.
Type '{ date: Date; }' is not assignable to type 'Data'.
Property 'dd' is incompatible with index signature.
Type 'Date' is not assignable to type 'number'.
我该如何解决这个问题?
答案 0 :(得分:3)
如果我们想要分配一个联合类型,那么我们首先需要创建一个联合类型。在您的问题中,您正在创建一个交集类型。
|
运算符并表示“可以是多种类型之一的值。”&
运算符并将“多个类型合并为一个。”一旦我们有了一个联合类型,我们就可以使用它所代表的几种类型中的一种来分配它。
这是an example union type assignment in the TypeScript Playground。
interface Data {
[key: string]: number;
}
interface MetaData {
date: Date;
}
// This creates a union type.
type Datapoint = MetaData | Data;
// This assigns to it with the MetaData type
let someMetaData: Datapoint = {
date: new Date()
};
// This assigns to it with the Data type
let someData: Datapoint = {
"foo": 12376,
"bar": 11233,
"baz": 72343
};
另请参阅:https://www.typescriptlang.org/docs/handbook/advanced-types.html