微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在打字稿中使用不同类型的通用键键入对象

如何解决如何在打字稿中使用不同类型的通用键键入对象

您如何在打字稿中键入此对象?

我有一个特殊的“ datetime”键,它是一个Date,其余的键是数字。但是我不预先知道将在每个对象上设置哪些键。值示例:

type Metrics = ??????

const example1: Metrics = {
  datetime: new Date(),activity: 12.34,min: 12.34,max: 12.34,}
const example2: Metrics = {
  datetime: new Date(),avg: 12.34,}

这是我尝试过的:

type Metrics = {
  datetime: Date,[key: string]: number,}
// ERROR on the type deFinition:
// Property 'datetime' of type 'Date' is not assignable to string index type 'number'


type Metrics = { 
    datetime: Date 
} & {  
    [key: string]: number 
}
// ERROR on the variable assignment:
// Type '{ datetime: Date; activity: number; min: number; max: number; }' is not assignable to type 'Metrics'.
//   Type '{ datetime: Date; activity: number; min: number; max: number; }' is not assignable to type '{ [key: string]: number | null; }'.
//     Property 'datetime' is incompatible with index signature.
//       Type 'Date' is not assignable to type 'number'.

解决方法

您想要这样的东西:

type Metrics<K extends keyof any> = { datetime: Date } & Record<Exclude<K,"datetime">,number>;

function makeMetrics<T extends Metrics<keyof T>>(metrics: T): T {
    return metrics;
}

const example1 = makeMetrics({
    datetime: new Date(),activity: 12.34,min: 12.34,max: 12.34,});
const example2 = makeMetrics({
    datetime: new Date(),avg: 12.34,});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。