分配给Typescript中的联合类型

分配给Typescript中的联合类型,typescript,Typescript,我有: 到目前为止还不错。当我需要制作其中一个时,问题就出现了: interface Data { [key: string]: number } interface MetaData { date: Date } export type Datapoint = MetaData & Data 如何解决此问题?如果要指定联合类型,则首先需要创建联合类型。在您的问题中,您正在创建交叉点类型 联合类型使用|运算符并表示“可以是多种类型之一的值” 交叉口类型使用&运算符

我有:

到目前为止还不错。当我需要制作其中一个时,问题就出现了:

interface Data {
    [key: string]: number
}

interface MetaData {
    date: Date
}

export type Datapoint = MetaData & Data

如何解决此问题?

如果要指定联合类型,则首先需要创建联合类型。在您的问题中,您正在创建交叉点类型

  • 联合类型使用
    |
    运算符并表示“可以是多种类型之一的值”
  • 交叉口类型使用
    &
    运算符并将“多种类型合并为一种类型”
一旦我们有了一个联合类型,我们就使用它所代表的几种类型中的一种来分配它

这是


另请参见:

注意,这是交叉点类型,而不是联合类型(请参见)。如果它是一个联合类型(
MetaData | Data
),您就可以了,但是根据定义,您不能同时生成
MetaData
Data
(因为
date
属性不能同时是
number
date
),无法在TypeScript中描述您想要的内容。索引类型
{[key:string]:number}
意味着每个属性都必须具有
number
类型,没有类似“但是如果属性名称是
date
则它必须是
日期,而不是
number
”的规定
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'.
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
};