在Typescript中分配给联合类型

时间:2017-08-07 21:09:35

标签: typescript

我有:

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'.

我该如何解决这个问题?

1 个答案:

答案 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