如何缩小数字类型以省略NaN,-Infinity,+ Infinity

时间:2017-09-24 11:28:19

标签: typescript

例如来自ramda-adjunct

RA.isPositive(1); // => true RA.isPositive(Number.MAX_VALUE); // => true RA.isPositive(-Infinity); // => false RA.isPositive(NaN); // => false RA.isPositive('5'); // => false 谓词
isPositive(val: any): val is number

的类型为NaN, -Infinity, +Infinity

但是号码仍然包含{{1}},如何省略它们?

2 个答案:

答案 0 :(得分:3)

您可以将您的要求视为处理primitive obsession并将此类数字封装到valueOf()类型中,并在构造函数中使用相应的保护子句,并允许算术运算class FiniteNumber { constructor(public value: number) { if (!isFinite(value)) { throw new RangeError(`Expecting finite number`); } } valueOf() { return this.value; } } const n2 = new FiniteNumber(2); console.log(n2); // → FiniteNumber { value: 2 } console.log(1 + n2.value); // → 3 console.log(1 + <any>n2); // → 3 console.log(new FiniteNumber(NaN)); // → Uncaught RangeError: Expecting finite number 方法:

System.out.print("How many sides does die 1 have? ");
Die1 = Scan.nextInt();
System.out.print(Die1);

System.out.print("How many sides does die 2 have? ");
Die2 = Scan.nextInt();
System.out.print(Die2);

→通过TypeScript Playground执行代码。

答案 1 :(得分:1)

类型约束在TypeScript中的方式是不可能的。

您将需要针对这些特定值的运行时防护。