ts 解决找不到命名空间“Courses”

2,853 阅读1分钟

记录一个遇到的ts问题以及其解决办法。 在typings.d.ts中,定义了一个类型

declare namespace Courses {
  // 解锁规则
  type UnlockRuleEnum = 'RIGHT_NOW' | 'SEQUENCE' | 'TIMED_X_DAY' | 'TIMED_X_WEEK'; //立即解锁、顺序解锁、定时解锁-第X天、定时解锁-第x周
}

使用的时候没有问题

// 解锁规则
export const UNLOCK_RULE_ENUM: { [k in Courses.UnlockRuleEnum]: string } = {
  RIGHT_NOW: '立即解锁',
  SEQUENCE: '顺序解锁',
  TIMED_X_DAY: '定时解锁(天)',
  TIMED_X_WEEK: '定时解锁(周)',
};

后来我们需要从外部引入一个 categoryEnum 类型定义,引入方式:

import type { categoryEnum } from '@/utils/constants'

然后我们发现,之前的使用会报错

image.png 解决办法:

export = Courses
export as namespace Courses

完整写法:

import type { categoryEnum } from '@/utils/constants'
declare namespace Courses {
  // 解锁规则
  type UnlockRuleEnum = 'RIGHT_NOW' | 'SEQUENCE' | 'TIMED_X_DAY' | 'TIMED_X_WEEK'; //立即解锁、顺序解锁、定时解锁-第X天、定时解锁-第x周
}
export = Courses
export as namespace Courses