分配给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
};