繁体   English   中英

如何从 Typescript 中的 function 参数中删除某些类型检查?

[英]How to remove some type checks from a function parameter in Typescript?

我有以下类型:

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

和 function

function bla(data: test) {}

现在,这个想法是,无论我从哪里调用bla ,我都无法传递将具有test1, test2, test3的数据,而只有test2, test3 Typescript 会抱怨我没有通过包含所有test1, test2, test3的数据。

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

您可以Omit object 类型的属性:

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创建一个映射的相交类型,它允许您从原始 object 中选择某些属性作为可选:

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的任何键的联合一起使用。

您可以像这样将test1属性设为可选:

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

据我了解您的问题,您需要覆盖外部库中的类型。

然后在你的src文件夹中创建一个custom-typings.d.ts文件并像这样填充它:

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

// let's say you use import { bla } from 'your-exact-library-name';
declare module 'your-exact-library-name' {
    declare function bla(data: test): any;
}

之后,您将能够使用您自己的类型调用 function。

暂无
暂无

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

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