首页 > 其他分享 >TS中扩展window对象

TS中扩展window对象

时间:2024-01-17 18:24:32浏览次数:17  
标签:ts url 扩展 baseUrl TS window globalConfig any

TS中扩展window对象

ts中扩展widows对象,方法四种:

  1. 使用windows的地方,利用断言将window变为any;
  2. 使用windows地方,利用接口继承扩展Window接口;
  3. 利用@ts-ignore命令
  4. 利用声明合并,扩展全局声明;
  5. 利用声明合并,定义全局接口;

示例函数:

// widow对象动态添加globalConfig对象
function getLocalApiUrl(url: any) {
  let baseUrl = window?.globalConfig?.api || ''
  return `${baseUrl}${url}`
}

利用断言将window变为any

function getLocalApiUrl(url: any) {
  
  // 利用断言:as断言或者<T>断言
  // <T>类型断言
  const extendWindow = <any>window
  // as类型断言
  // const extendWindow = window as any
  let baseUrl = extendWindow?.globalConfig?.api || ''
  
  return `${baseUrl}${url}`
}

接口继承扩展Window接口

function getLocalApiUrl(url: any) {
  
  interface extendsWindow extends Window{
    globalConfig?:any
  }
  
  let _window :extendsWindow= window
  let baseUrl = _window?.globalConfig?.api || ''


  //  let baseUrl = window?.globalConfig?.api || ''
  return `${baseUrl}${url}`
}

注意

window对象的类型为Window而不是window,注意区分大小写;

globalConfig因为是动态,非必有,必须添加"?";不然编译报错;

@ts-ignore命令

export function getLocalApiUrl(url: any) {
  
  // 忽略该行类型检查

  //@ts-ignore
  let baseUrl = window?.globalConfig?.api || ''
  return `${baseUrl}${url}`
}

注意

也可以使用// @ts-nocheck;但是该指令:用于当前文档,忽略所有类型检查

扩展全局声明

示例函数不变;新建一个声明文件:

// 新建声明文件,如index.d.ts
// 内容如下:

declare global{
  interface Window{
    globalConfig:any
  }
}
export {};

注意

export {},必须有导出语句;这是因为全局对象扩充语句必须在模块外部模块声明中使用,当添加了空导出语句后,该文件就成了一个模块

定义全局接口

示例函数不变;新建一个声明文件:

// 新建声明文件,如index.d.ts
// 内容如下:

interface Window{
  globalConfig:any
}

注意

这里新定义Window接口;和TS中原同名接口,进行合并;

注意这里是定义全局接口,所以不能有任何导入和导出;

标签:ts,url,扩展,baseUrl,TS,window,globalConfig,any
From: https://www.cnblogs.com/niehao/p/17970685

相关文章

  • jax框架的 Pallas 方式的GPU扩展不可用
    说下深度学习框架的GPU扩展功能的部分,也就是使用个人定制化的GPU代码编写方式来为深度学习框架做扩展。深度学习框架本身就是一种对GPU功能的一种封装和调用,但是由于太high-level,因此就会摒弃掉一些原有的GPU底层的编程功能,为此可以使用GPU原始功能的代码来为深度学习编写扩展函......
  • vue+tsc+noEmit导致打包报TS类型错误问题及解决方法
    当我们新建vue3项目,package.json文件会自动给我添加一些配置选项,这写选项基本没有问题,但是在实际操作过程中,当项目越来越复杂就会出现问题。本文列举一个目前我遇到的一个问题:打包后报了一堆TS类型错误,怎么消除这些错误?项目环境:Vue3+Vite+TS当项目进行打包时候,突然发现终端......
  • RTSP/Onvif安防视频云平台EasyNVR迁移盘符后启动异常的问题排查与解决
    EasyNVR安防视频云平台可支持设备通过RTSP/Onvif协议接入,并进行视频流的处理及分发,在视频监控场景中可实现视频实时监控直播、云端录像、云存储、录像检索与回看、告警、级联等,平台能将拉取过来的音视频流转化成适合全平台播放的RTMP、RTSP、hTTP-FLV、Websocket-FLV、HLS、WebRTC......
  • DOTS Instancing合批:如何针对单个渲染实体修改材质参数
    DOTSInstancing合批:如何针对单个渲染实体修改材质参数   最近在做DOTS的教程,由于DOTS(版本1.0.16)目前不支持角色的骨骼动画,我们是将角色的所有动画数据Baker到一个纹理里面,通过修改材质中的参数AnimBegin,AnimEnd来决定动画播放的起点和终点,材质参数AnimTime记录当前过去......
  • echarts 常用的自定义组件
    一、自定义tooltip:多条曲线,series中name过长,鼠标悬浮时,文字过长,展示样式需自定义tooltip:{trigger:'axis',formatter:function(params){if(!params||params.length==0){return}varresult='<divstyle="padding-bottom:5px;">&#......
  • 使用Bootstrap方法在Python中绘制带有置信带的ROC曲线
    Bootstrap方法是一种统计学方法,在样本数据有限的情况下,通过随机重采样的方式来估计样本统计量的分布。通过应用Bootstrap方法,我们可以通过对训练数据进行多次重采样,并在每次重采样后重新拟合模型,得到多个ROC曲线。然后,我们可以使用这些ROC曲线的结果来计算置信带,以评估模型的稳定性......
  • 鸿蒙ArkTs,重新配置签名(真机运行报错而控制台没有报错的解决方法)
     找到如下路径,删除该代码段,重新认证。 找到项目结构  重新配置签名 点击SignIn,会自动跳入华为官网,登录华为账号后,授权登录,弹出如下页面 再次回到IDE,会弹出如下页面,点击Agree同意   随后IDE会自动生成签名文件,点击OK后,会看到根目录的build-profile.json......
  • G. Lights
    原题链接太巧妙了!!关键1:把开着的灯当成黑点看待关键二:如图更多细节请看代码code#include<bits/stdc++.h>usingnamespacestd;intto[100005];//代表会被我影响的灯,抽象成边voidsolve(){intn;intstate[100005]={0};//代表每个灯的状态int......
  • windows开放端口的方法(win10)
    windows开放端口的方法(win10)先从控制面板,进入到WindowsDefender防火墙点击高级设置,点击入站规则点击右边的新建规则,点击端口,点击下一步选择协议类型和端口号点击下一步即可......
  • 最新Unity DOTS Instancing合批:如何针对单个渲染实体修改材质参数
    最近在做DOTS的教程,由于DOTS(版本1.0.16)目前不支持角色的骨骼动画,我们是将角色的所有动画数据Baker到一个纹理里面,通过修改材质中的参数AnimBegin,AnimEnd来决定动画播放的起点和终点,材质参数AnimTime记录当前过去的动画时间。但是在做大规模战斗控制的时候,有10000+的小兵在战斗......