typescript 如何全局声明 enum 枚举类型和值?

如题,我使用 vue+ts 开发项目,想要在全局声明 enum 枚举类型并赋默认值,因为项目中我会多出用到枚举类型,我希望全局可以直接使用,是必须导出并导入吗?
目前我是通过 .d.ts 声明文件来声明的,直接使用会报错,该枚举类型未定义。
test.d.ts

declare enum Directions {
  Up=1,
  Down=2,
  Left=3,
  Right=4
}

index.ts

function getDirection (direction: Directions) {
  console.log('##########direction', direction)
}
getDirection(Directions.Up)
阅读 5.3k
3 个回答
✓ 已被采纳
// 在 types.ts 文件中
export enum UserType {
  Admin = 'Admin',
  User = 'User',
  Visitor = 'Visitor'
}

然后在需要使用的地方导入:

import { UserType } from './types';

let user: UserType = UserType.Admin;

对于全局声明,你可以在项目根目录下的 shims.d.ts 文件中进行声明,或者在 src 目录下创建一个新的 .d.ts 文件:
// shims.d.ts

declare enum UserType {
  Admin = 'Admin',
  User = 'User',
  Visitor = 'Visitor'
}

然后你就可以在整个项目中使用这个枚举类型了,无需导入:
let user: UserType = UserType.Admin;
需要注意的是,全局声明的枚举类型无法使用 import 导入。

这个情况必须导出使用,因为你使用了 enum 的运行时特性,而其它 TypeScript 的类型注解都是编译时特性,那些特性是可以全局默认导入的。

export enum Directions {
  Up = 1,
  Down = 2,
  Left = 3,
  Right = 4
}

index.ts:


import { Directions } from './directions';

function getDirection(direction: Directions) {
  console.log('##########direction', direction);
}

getDirection(Directions.Up);
推荐问题
logo
Microsoft
子站问答
访问
宣传栏