覆盖在 Typescript d.ts 文件中定义的接口属性类型v2.0 深度修改

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

例如:中的接口定义为x.d.ts

interface A {
  property: number;
}

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

interface A {
  property: Object;
}

或者即使这样也可以

interface B extends A {
  property: Object;
}

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


答案 1

我使用的方法首先筛选字段,然后合并它们。

引用 从类型中排除属性

interface A {
    x: string
}

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

对于接口:

interface A {
    x: string
}

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

答案 2
 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<OriginalInterface , {
  a: number;
  b: number;
}>

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

循序渐进:

type R0 = Omit<OriginalType, 'a' | 'b'>        // { 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<OriginalType, T0>               // { c: number; }
type T2 = T1 & {a: number, b: number }         // { a: number; b: number; c: number; }

TypeScript Utility Types


v2.0 深度修改

interface Original {
  a: {
    b: string
    d: {
      e: string // <- will be changed
    }
  }
  f: number
}

interface Overrides {
  a: {
    d: {
      e: number
      f: number // <- new key
    }
  }
  b: {         // <- new key
    c: number
  }
}

type ModifiedType = ModifyDeep<Original, Overrides>
interface ModifiedInterface extends ModifyDeep<Original, Overrides> {}
// ModifiedType =
{
  a: {
    b: string
    d: {
      e: number
      f: number
    }
  }
  b: {
    c: number
  }
  f: number
}

在下面找到ModifyDeep