从T省略属性K时的类型安全

时间:2019-06-07 04:32:07

标签: angular typescript types

问题描述

我遇到的情况是,我有一个函数期望类型为T的对象,但不包括T的某些属性。

我设法创建了一个从K排除特定属性T的类型,而没有问题(以下解释:Exclude property from type

现在,我的问题是Typescript不会在预期的情况下给我键入错误,在某些情况下,我仍然可以传递带有属性K的对象,该对象应排除在外。

示例

我将提供一个小场景来说明:

采用以下类型和给定的接口:

export type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>

export type DataExclude<T, K extends keyof T> = Partial<Omit<T, K>>


export interface Data {
  ID: number,
  payload: any,
  size: number,
} 

现在说我想要一个函数,其参数类型为Data,但不包括"ID",我可以这样写:

 printDataPartial(partialData: DataExclude<Data,"ID">){
    console.log(partialData)
 }

现在,我希望该函数从Data中获取具有"ID"以外的任何属性的对象(并且不必是每个属性,因此{{ 1}}类型)。但是它不会接受Partial<>作为属性

结果

以下是一些用例:

DataExclude

我也做了Stackblitz以便进行测试。


简而言之,我想知道如果提供的函数参数的属性中包含ID,并且我想使用类型,是否有办法在编辑器中显示类型错误?安全地这样做,而不仅仅是手动遍​​历给定参数的每个属性。

0 个答案:

没有答案