大きすぎて`number`型で表現できない数を扱う[[データ型 (JavaScript)|データ型]]
`Number.MAX_SAFE_INTEGER`を超えた値は正確に演算を行えない。
```ts
const big = Number.MAX_SAFE_INTEGER
// ^? const big: number
for (let i = 0; i < 10; i++) {
console.log(big + i)
}
// 演算結果が正確ではない
// 9007199254740991
// 9007199254740992
// 9007199254740992
// 9007199254740994
// 9007199254740996
// 9007199254740996
// 9007199254740996
// 9007199254740998
// 9007199254741000
// 9007199254741000
```
<button class="playground"><a href="https://www.typescriptlang.org/play?ssl=2&ssc=1&pln=2&pc=9#code/MYewdgzgLgBARgSwOYwLwwHIFcC2cCmATgHQCyAggBoD6AyuQGICi1AkhgCpMDiTASgCgA9EJhiYAPQD8AgQDMQhGAAoANvlgI0MAAwBuGFoA8MAIz7DAaksBKGAG8B4mKEgh1xVSCTLEKS4Y2AgC+siIwgCj2gOnegAq+gDnmgDIMgMbWgF0egOYMgPYMgFYMgCIMwqIAnDo6AOymBQUATACsACwltToVpjD5MEWl5VV1DU1VreEdZRU19Y0jA4XFw91jfbWT7dNdo70VAGyLQys94wWbbdsju30Hg8vHcxUAHFsXsw3mxXedl4-FOq1AA">Playground</a></button>
[[BigInt (JavaScript)|BigInt]]を使うことで`Number.MAX_SAFE_INTEGER`を超えた値でも正しく演算できる。
```ts
// BigIntで囲むとBigIntになる (newは不要)
const big = BigInt(Number.MAX_SAFE_INTEGER)
// ^? const big: bigint
// nのsuffixで数値リテラルがBigIntになる. BigInt(0)でも同じ
for (let i = 0n; i < 10; i++) {
console.log(big + i)
}
// 正確な演算結果
// 9007199254740991
// 9007199254740992
// 9007199254740993
// 9007199254740994
// 9007199254740995
// 9007199254740996
// 9007199254740997
// 9007199254740998
// 9007199254740999
// 9007199254741000
```
<button class="playground"><a href="https://www.typescriptlang.org/play?target=7&ssl=3&ssc=1&pln=3&pc=10#code/PTAECEEsHMEkDsAuhzBkE9qgAhkBYMU5MNYMgVgyDRDKABTwCmA7oPYMgsHKCBkQJQBQAxgPbwDOioARjFABeCDASJSAOQCuAW34UATgDoAsgEEAGgH0AyhoBiAUR2wpAFWMBxYwCVWIUM+cA9APwsWT+IDsGbjIAZoGQAB7IgA6mgCQKgFcMgGMMgJcMgNcMgDIMOBKERCpiuJIADEzIgEEMgDAqgBoMLIEcSmQANhR8kCKgefAA3KBNADygAIx5HZAA1ENMoADeLC6gnDwc9Sq1HNCkgtCgQ52sAL5eToDG1oBdHgSAKPaA6d6ACr6AOebeYACceXkA7L13dwBMAKwALE-feW9eqBbqAHs9Xh8fn8AR9gU4wS83l9fv83gBmOH3R6IyEomHfTGg7EQ5HQt6fQkIklQ1F3ABslOJSJpMKejPBzLxbwAHOycaTaXc+dSUf1HsCgA">Playground</a></button>