覆盖 Typescript d.ts 文件中定义的接口属性类型

新手上路,请多包涵

有没有办法更改打字稿中 *.d.ts 中定义的接口属性的类型?

例如:

x.d.ts 中的接口定义为

interface A {
  property: number;
}

我想在我写入的打字稿文件中更改它

interface A {
  property: Object;
}

甚至这也行

interface B extends A {
  property: Object;
}

这种方法会奏效吗?当我在我的系统上尝试时,它不起作用。只是想确认它是否可能?

原文由 Abdul23 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.7k
2 个回答

我使用一种方法,首先过滤字段,然后将它们组合起来。

参考 从类型中排除属性

interface A {
 x: string
 }

 export type B = Omit<A, 'x'> & { x: number };

对于接口:

 interface A {
 x: string
 }

 interface B extends Omit<A, 'x'> {
 x: number
 }

原文由 ZSkycat 发布,翻译遵循 CC BY-SA 4.0 许可协议

 type ModifiedType = Modify<OriginalType, {
  a: number;
  b: number;
}>

interface ModifiedInterface extends Modify<OriginalType, {
  a: number;
  b: number;
}> {}

ZSkycat 的 extends Omit 解决方案的启发,我想到了这个:

>  type Modify<T, R> = Omit<T, keyof R> & R;
>
> // before typescript@3.5
> type Modify<T, R> = Pick<T, Exclude<keyof T, keyof R>> & R
>
> ```

例子:

interface OriginalInterface { a: string; b: boolean; c: number; }

type ModifiedType = Modify

// ModifiedType = { a: number; b: number; c: number; }


一步一步来:

type R0 = Omit // { c: number; } type R1 = R0 & {a: number, b: number } // { a: number; b: number; c: number; }

type T0 = Exclude<‘a’ | ‘b’ | ‘c’ , ‘a’ | ‘b’> // ‘c’ type T1 = Pick // { c: number; } type T2 = T1 & {a: number, b: number } // { a: number; b: number; c: number; }


[TypeScript 实用程序类型](https://www.typescriptlang.org/docs/handbook/utility-types.html#omittk)

* * *

# 深度修改 v3

interface Original { a: { a: string b: { a: string } c: string d: string // <- keep this one } }

interface Overrides { a: { a: { a: number } // <- overwrite string with object b: number // <- overwrite object with number c: number // <- overwrite string with number e: number // <- new property } }

type ModifiedType = ModifyDeep interface ModifiedInterface extends ModifyDeep {}


const example: ModifiedType = { a: { a: { a: number }, b: number, c: number, d: string, e: number, } }

”`

在下面 找到 ModifyDeep

原文由 Qwerty 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题