Typescript:覆盖历史记录的全局类型

标签 typescript

我的 typescript 包包含一个全局类型文件,它定义了 history 对象,如下所示:

lib.dom.d.ts

interface History {
    readonly length: number;
    scrollRestoration: ScrollRestoration;
    readonly state: any;
    back(): void;
    forward(): void;
    go(delta?: number): void;
    pushState(data: any, unused: string, url?: string | URL | null): void;
    replaceState(data: any, unused: string, url?: string | URL | null): void;
}

declare var history: History;

我想告诉编译器 state 属性有一个 key 属性。

我尝试过这个:

declare global {
  interface TypedHistory extends History {
    state: { key: string };
  }
  var history: TypedHistory;
}

console.log(history.state.key);

但我收到此错误: 后续变量声明必须具有相同的类型。变量“history”必须是“History”类型,但这里的类型是“TypedHistory”。

我该如何实现这个目标?最好在我使用 history 对象的同一个文件中声明它。

我不关心这个类型定义是否始终成立,只关心如何实现这一点。

最佳答案

只需将 var 声明移到括号之外即可。哎呀...

declare global {
  interface TypedHistory extends History {
    state: { key: string };
  }
}

declare var history: TypedHistory;

关于Typescript:覆盖历史记录的全局类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74331754/

相关文章:

javascript - URL 中的参数总是字符串吗?

typescript - 将对象的数组/元组转换为由属性键入的对象的通用类型

javascript - 在 React Native 的其他 .tsx 组件中使用 .tsx 组件

reactjs - 在 rtk 查询中使用条件 header 的正确方法?

javascript - 是否可以将 jQuery 对象作为构造函数参数传递给 typescript 对象?

javascript - 在 Angular 2 中使用外部 JavaScript 文件

javascript - 为什么声明类型 <any> 可以解决未知方法的错误? ( typescript )

javascript - 在 Angular-CLI 项目中使用 mdTooltip

函数参数的 typescript 复制签名

javascript - 处理异步/等待 Angular HttpClient 方法中的错误