首页 > 解决方案 > 如何从 Typescript 中的函数参数中删除一些类型检查?

问题描述

我有以下类型:

type test = {
   test1: number
   test2: number
   test3: number
}

和功能

function bla(data: test) {}

现在,这个想法是,无论我bla从哪里打电话,我都无法传递将拥有的数据test1, test2, test3,而只能传递test2, test3. Typescript 会抱怨我没有传递包含所有test1, test2, test3.

你会如何解决这样的问题?

标签: javascripttypescript

解决方案


您可以Omit从对象类型中获取属性:

type OmitTest = Omit<test, "test1">;

这与以下内容相同:

type OmitTest = {
  test2: number;
  test3: number;
}

或创建一个Partial以使所有属性可选:

type PartialTest = Partial<test>;

这与以下内容相同:

type PartialTest = {
  test1?: number;
  test2?: number;
  test3?: number;
}

编辑

您可以使用它创建一个映射的相交类型,Omit它允许您从原始对象中选择某些属性作为可选:

type PickPartial<
  T extends {[key: string]: any}, 
  Keys extends keyof T
> = Omit<T, Keys> & {[K in Keys]?: T[K]};

type PickPartialTest = PickPartial<test, "test1">;

结果如下:

type PickPartialTest = {
  test1?: number;
  test2: number;
  test3: number;
}

这将与来自 object 的任何键的联合一起工作T


推荐阅读