如何将 declare 定义的TS代码编译成js

新手上路,请多包涵

// declare 声明全局变量
// is 判断变量类型 返回 boolean
export declare const isString: (val: unknown) => val is string
export declare const isNumber: (val: unknown) => val is number

class ElementPlusError extends Error {
  constructor (m: string) {
    super(m)
    this.name = 'ElementPlusError'
  }
}

// TODO: eslint 函数重载报错 需要修改eslint 配置
export function debugWarn(err: Error): void
// eslint-disable-next-line
export function debugWarn(scope: string, message: string): void
// eslint-disable-next-line
export function debugWarn (scope: string | Error, message?: string): void {
  if (process.env.NODE_ENV !== 'production') {
    const error: Error = isString(scope)
      ? new ElementPlusError(`[${scope}] ${message}`)
      : scope
    // eslint-disable-next-line no-console
    console.warn(error)
  }
}

[~VYXGTGHH8JZ(`HG7A1P6A.png

如上图所示: 使用 declare 定义的 方法 在编译成 js 的时候消失了。
想要他编译成 如下方法:

const isNumber = (val) => typeof val === "number"

构建工具: vite

阅读 3.3k
2 个回答

不写declare就行了吧。
首先你需要保证自定义内容确实加载了,然后declare的作用是你不用每次都额外声明import了。

// app.tsx
const LANG = 'zh-CN'; // 这是顶级作用域的变量,全局可用
// any.d.tsx
declare const LANG: string;
// other.tsx
const currentLang = userLang || LANG; // 不用import LANG from app.tsx了

已参与了 SegmentFault 思否社区 10 周年「问答」打卡 ,欢迎正在阅读的你也加入。

  1. 不写declare关键词
  2. 自己在ts中实现函数判断的逻辑语录
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题