[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>>
];
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源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)