如何修改TypeScript接口属性返回类型而不更改其名称?

0sgqnhkj  于 2023-04-22  发布在  TypeScript
关注(0)|答案(1)|浏览(110)

我有一个包含以下代码的d.ts文件,它在“some-js-library”模块中声明了两个接口-FooBar

declare module "some-js-library" {
  interface Foo {
    foo: boolean;
  }

  interface Bar {
    barFoo: Foo;
  }
}

在我的app.ts文件中,我想将Bar接口中barFoo属性的返回类型从Foo更改为boolean。由于我无法直接修改d.ts文件,因此我在app.ts中再次声明模块。

import { Bar } from "some-js-library";

declare module "some-js-library" {
  interface Bar {
    barFoo: boolean; //<-- Subsequent property declarations must have the same type.  Property 'barFoo' must be of type 'Foo', but here has type 'boolean'.ts(2717)
  }
}

const bar: Bar = { barFoo: true }; // <-- error: Type 'boolean' is not assignable to type 'Foo'.ts(2322)

但是,TypeScript抛出了一个错误:

Subsequent property declarations must have the same type. Property 'barFoo' must be of type 'Foo', but here has type 'boolean'.

有没有一种方法可以修改barFoo的返回类型而不改变它的名称?

qybjjes1

qybjjes11#

如果没有在类型的定义中显式允许,则无法在TypeScript中更改属性类型。
重新定义Bar接口以允许这两种类型的最简单方法是:

interface Bar {
  barFoo: Foo | boolean;
}

请参阅Overriding interface property type defined in Typescript d.ts file以了解使用实用程序类型的潜在解决方案。

相关问题