Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
505 views
in Technique[技术] by (71.8m points)

Typescript枚举类型

问题1:如下写法为何不报错呢?我理解变量 a 的值应该是 1 ~ 7?

enum Weekday {
  Monday = 1,
  Tuesday,
  Wednesday,
  Thursday,
  Friday,
  Saturday,
  Sunday,
}
//不报错
const a: Weekday = 100;

问题2:如下写法为何会报错呢?

enum Direction {
  Up = 'UP',
  Down = 'DOWN',
  Left = 'LEFT',
  Right = 'RIGHT',
}
//error:不能将类型“"DOWN"”分配给类型“Direction”
const b: Direction = 'DOWN';

问题3:那如何实现上面的这种需求呢?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

这个问题上周研究了半天,大佬们回答的 断言Direction.DOWN 取代 'DOWN' 也可以临时规避此问题。

此类问题在typescript github上有很多issue反馈,似乎是ts设计问题。

#32690中,提问者给出一种解决方法:

namespace MyEnum {
  export const Zero = 0;
  export type Zero = typeof Zero;

  export const One = 1;
  export type One = typeof One;
}
type MyEnum = typeof MyEnum[keyof typeof MyEnum];
const foo: MyEnum.Zero = 0 // okay as expected
const bar: MyEnum.Zero = 1 // error as expected

其它相关issues:#31834#30629#26362#22464#22311


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...