有谁知道如何创建这种类型? 如果'evenNumbers'是类型的名称,我想要例如:
let a:evenNumbers = 3
将返回错误和
let a:evenNumbers = 4
不会。
感谢。
答案 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.
这很棒,但是正如你所看到的,我已经指出了这种方法存在的问题。
虽然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;
}
}