繁体   English   中英

参数类型作为通用接口中键的值

[英]Parameter type as value of key in generic interface

我已经尽了最大的努力来制作一个类型安全的通用 function ,它将值设置为 object 约束到指定的接口。 为了更清楚地说明我想要实现的目标,这是我已经提出的:

export interface OrderFormData {
  start?: {
    startDate?: string;
  };
  verification?: {
    validFrom: Date;
    validTo: Date;
  };
}

export class FormDataService {
  testFormData: any = {};
  
  public testSetFormData<T>(key: keyof T, value: T[keyof T]) {
    this.testFormData = this.testFormData as T;
    this.testFormData[key] = value;
  }

  func() {
    this.testSetFormData<OrderFormData>('start', '')
  }
}

现在,这还不算太糟糕! 但是,它没有向我显示我可以为value -Parameter 传递什么类型,而是为我提供了界面中所有键的不同类型的列表: 显示所有不同的键类型时出错

我不想向我显示各种条目,而是将其减少为界面中键的值的类型(在上述情况下,它只会显示Argument of type '""' is not assignable to parameter of type '{ startDate?: string; }' )。

我已经尝试过testSetFormData<T>(key: keyof T, value: T[key]) {...} ,但这似乎不是有效的语法。 关于如何将第一个参数合并到第二个参数的类型中的任何想法?

TS游乐场

如果要针对特定属性,最好对每个属性使用设置器 function 而不是使用 generics。

但是,如果您想定位任何属性并使用 generics,那么您可以尝试以下操作:

function setFormData<T>(object: Partial<T>) {
  testFormData = {...testFormData, ...object }
}

setFormData<OrderFormData>({ start: "" })

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM