在 TypeScript 中使用更具体的数据类型?

问题描述 投票:0回答:1

TypeScript 有没有办法编写特定的数据类型而不仅仅是伞形数字类型? 例如,如果我想要从函数专门返回整数类型,那么有什么方法可以代替:

function function_name (_params) : number {}
如果没有,那么确保我返回我想要的特定类型(例如浮点数整数)的最合适方法是什么?

我尝试过这个:

function function_name (_params) : int {}
但它显然不起作用! 我能想到的一种方法是确保在返回值时我可以使用旧的“%”(模)检查它是否是整数,但我认为会有一种更干净的方法来做到这一点,所以决定询问这个问题。

typescript
1个回答
0
投票

正如原始 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
© www.soinside.com 2019 - 2024. All rights reserved.