以全局方法 calculate 为例

src/utils/calculate.ts

export default {
  sum: function (a: number, b: number) {
    return a + b
  }
}

方案1: 依赖注入 provide inject

main.ts

import calculate from './utils/calculate'

app.provide('calculate', calculate)

页面中

// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
const { sum } = inject('calculate')

const result = sum(1, 2)
console.log(result) // 3
  • inject 只能在 setup 中使用,不能写在其他函数内部
  • inject() 的类型推导为 unknown,所以需用 @ts-ignore 屏蔽 ts 类型推导校验

方案2: globalProperties + proxy

main.ts

import calculate from './utils/calculate'

// 定义全局方法
app.config.globalProperties.calculate = calculate

页面中

const { proxy } = getCurrentInstance()!

// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
const result = proxy.calculate.sum(1, 2)
console.log(result)
  • getCurrentInstance() 类型推导可能为 null,需加 !声明其不为 null
  • proxy 上无法推导出自定义的全局方法,所以需用 @ts-ignore 屏蔽 ts 类型推导校验