typescript - 创建表示偶数组的类型

时间:2017-04-03 11:19:46

标签: javascript typescript types

有谁知道如何创建这种类型? 如果'evenNumbers'是类型的名称,我想要例如:

let a:evenNumbers = 3

将返回错误和

let a:evenNumbers = 4

不会。

感谢。

2 个答案:

答案 0 :(得分:2)

您可以指定哪些数字对于给定类型有效。

e.g。

type EvenNumber= 2 | 4 | 6 | 8;

let foo: EvenNumber= 8;
let bar: EvenNumber= 9; // ERROR: 9 isn't even 
let baz: EvenNumber= 10; // ERROR: 10 is even, but it isn't defined as part of the Even type.

Typescript Playground

这很棒,但是正如你所看到的,我已经指出了这种方法存在的问题。

虽然10是偶数,但它仍然是错误的,因为它没有被定义为EvenNumber类型的一部分。

因此,您可以将EvenNumber重新定义为type EvenNumber= 2 | 4 | 6 | 8 | 10;

大!现在let baz: Even = 10;会有效,但是let baz: Even = 12;呢?

因此,您必须找到一种列出类型定义的每个偶数的方法。使用一些代码生成工具可能最好,而不是手工完成!

所以,我们现在有一个只允许偶数的类型定义。不幸的是,它所居住的文件现在必须非常大,并且可能会给编译器和IDE带来问题!

这是否回答了这个问题?是的!

这在现实世界中实际可用吗?甚至没有关闭。

答案 1 :(得分:1)

您可以定义这样的类型,并从val result = flights .view .filter(logRow => logRow.flightDate.isAfter(dateFrom) && logRow.flightDate.isBefore(dateTo)) .groupBy(_.destination) .map { case (location, logRows) => (location, logRows.length) } 方法中抛出Error

constructor()

由于EvenNumber是一个自定义类型,您应该使用构造函数来实例化它:

export class EvenNumber{
  value: number;
  constructor(value: number){
    if(value % 2 != 0){
      throw new Error('not even');
    }
    this.value = value;
  }
}