[Typescript] Merge Object into Window with Types

For example we want to have one object merge into Window with type information as well.

import { Equal, Expect } from "../helpers/type-utils";

const addAllOfThisToWindow = {
  add: (a: number, b: number) => a + b,
  subtract: (a: number, b: number) => a - b,
  multiply: (a: number, b: number) => a * b,
  divide: (a: number, b: number) => a / b,
};

Object.assign(window, addAllOfThisToWindow);

type tests = [
  Expect<Equal<typeof window.add, (a: number, b: number) => number>>,
  Expect<Equal<typeof window.subtract, (a: number, b: number) => number>>,
  Expect<Equal<typeof window.multiply, (a: number, b: number) => number>>,
  Expect<Equal<typeof window.divide, (a: number, b: number) => number>>,
];

 

We know that, dealing with Window, we need global.

declare global {
  interface Window {
  
  }
}

 

Also we know that, with Window, we have to use interface, instead of type.

 

With interface, we can actually use extends keyword to merge with existing interface.

interface Person {
    name: string
    age: number
}

interface Employee extends Person {
    company: string
}

const e: Employee = {
    name: 'zwan',
    age: 25,
    company: 'abc'
}

 

So that can help, to solve the problem we can do:

import { Equal, Expect } from '../helpers/type-utils';

declare global {
  type TAddToWindow = typeof addAllOfThisToWindow;
  interface Window extends TAddToWindow {}
}

const addAllOfThisToWindow = {
  add: (a: number, b: number) => a + b,
  subtract: (a: number, b: number) => a - b,
  multiply: (a: number, b: number) => a * b,
  divide: (a: number, b: number) => a / b,
};

Object.assign(window, addAllOfThisToWindow);

type tests = [
  Expect<Equal<typeof window.add, (a: number, b: number) => number>>,
  Expect<Equal<typeof window.subtract, (a: number, b: number) => number>>,
  Expect<Equal<typeof window.multiply, (a: number, b: number) => number>>,
  Expect<Equal<typeof window.divide, (a: number, b: number) => number>>
];

 

posted @   Zhentiw  阅读(44)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2021-02-24 [Serverless CLI + AWS] Get started with Serverless and AWS lambda
2020-02-24 [Javascript] You can't pass a variable
2019-02-24 [JS Compose] 7. Ensure failsafe combination using monoids
2019-02-24 [Functional Programming] Monad
2019-02-24 [Algorithm] Count Negative Integers in Row/Column-Wise Sorted Matrix
2019-02-24 [Ramda] Lens in Depth
2019-02-24 [React] Use the useReducer Hook and Dispatch Actions to Update State (useReducer, useMemo, useEffect)
点击右上角即可分享
微信分享提示