TypeScript 有没有办法编写特定的数据类型而不仅仅是伞形数字类型? 例如,如果我想要从函数专门返回整数类型,那么有什么方法可以代替:
function function_name (_params) : number {}
如果没有,那么确保我返回我想要的特定类型(例如浮点数整数)的最合适方法是什么?
我尝试过这个:
function function_name (_params) : int {}
但它显然不起作用!
我能想到的一种方法是确保在返回值时我可以使用旧的“%”(模)检查它是否是整数,但我认为会有一种更干净的方法来做到这一点,所以决定询问这个问题。
正如原始 staging ground Question 的评论中所述,JavaScript(以及扩展 TypeScript)不支持除
number
和 bigint
之外的数字类型。
对于一组特定数字,您可以依赖联合类型,例如:
type PowerOfTwo = 1 | 2 | 4 | 8 | 16; // and so on
对于完整的整数范围,您需要依赖运行时检查来断言数字实际上是整数。据我所知,最简洁的方法是使用标称类型和断言函数的组合:
type Int = number & { _brand: never };
function assertInt(n: number): asserts n is Int {
if(!Number.isInteger(n)) {
throw new Error(`${n} is not integer`);
}
}
然后,您可以使用断言函数来实现例如整数除法函数:
function divide(dividend: number, divisor: number): Int {
const quotient = Math.floor(dividend / divisor);
assertInt(quotient);
return quotient;
}
const x = divide(5, 2); // x is now of type Int