// 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中原同名接口,进行合并;

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