🎉 报错: 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即可