🎉 报错: Initializers are not allowed in ambient context

在定义ts类型文件时,使用types.d.ts命名。项目运行后报错:[vite] Internal server error: Initializers are not allowed in ambient context

这个错误信息的含义是,在TypeScript的“环境上下文”(ambient context)中不允许使用初始化器。环境上下文通常指的是声明类型、接口或模块等不直接产生运行时代码的部分。在这些上下文中,你不能直接给变量或属性赋值,因为这些值在运行时是不可见的。

导致该错误的可能原因:

  • 在接口或类型别名中直接初始化属性‌:TypeScript的接口和类型别名用于定义形状或结构,而不是实例。因此,在其中尝试直接初始化属性是不允许的。
  • 在声明文件中错误地使用初始化器‌:声明文件(.d.ts)用于描述已存在JavaScript库的类型信息,其中不应包含可执行的代码,包括初始化器。
  • 在全局或模块级别的变量声明中错误地使用了初始化器‌:在声明全局变量或模块导出时,如果不小心在类型声明部分使用了初始化器,也会导致此错误。

错误排查:

检查声明文件的正确性‌:确保 .d.ts文件中只包含类型声明,不包含任何可执行代码。

源文件:

import type { Ref, InjectionKey } from 'vue'
export type NameType = string | number

export interface CollapseProps {
  modelValue: NameType[] // 给每一项绑定一个值(值为字符串或者数字)
  accordion?: boolean // 是否手风琴模式
}
export interface CollapseItemProps {
  name: NameType
  title?: string
  disabled?: boolean
}

export interface CollapseContext {
  activeNames: Ref<NameType[]>
  handleItemClick: (name: NameType) => void
}

export interface CollapseEmits {
  (e: 'update:modelValue', values: NameType[]): void
  (e: 'change', values: NameType[]): void
}
export const collapseContextKey: InjectionKey<CollapseContext> =
  Symbol('collapseContextKey')

该type.d.ts文件中:

export const collapseContextKey: InjectionKey<CollapseContext> =
  Symbol('collapseContextKey')

进行了属性初始化。

解决办法:

修改文件名为type.ts即可