毎日、何か新しいことを。2018の22日目の記事です。こんにちは@mrsekutです。先日、TypeScriptの3.2がリリースされました。いろいろな細かい機能が入ったのですが、その中からBigIntについて取り上げます。本当は他のつよつよさんたちと同じように型をがちがちしたかっこいい記事を書きたかったのですが、理解と時間が足らなかったので、お預けです。ちなみにTypeScript3.2で変更のあった箇所は以下の記事でまとめられています。前のブログのリンク、環境構築などはn日目に書いた記事を参考にしてください。BigIntってなに?さて、本題です。整数値がInt型で正確にサポートされる範囲を超える可能性があるものを扱う型のことです。「Int型で正確にサポートされる範囲」は、Number.MAX_SAFE_INTEGERで確認することができます。52bitの仮数部で表現できる最大値である2^53-1になります。これ以上の数値が表示できないわけではないのですが、正確であることが保証されなくなります。実際下のコードの3行目は明らかに左辺と右辺は等しくないですが、trueと出力されます。trueちなみに、JSで表現できる最大数値はNumber.MAX_VALUEで確認できます。bigint今回のリリースで新しいプリミティブ型である「bigint」型が導入されました。bigint全て小文字の「bigint」型です。これは、プリミティブ型になります。以下の2通りの方法で宣言できます。基本的な演算はbigint同士ならできます。17nフィボナッチ10000番目のフィボナッチ数を求めるプログラムを書いてみました。result;}console.log(fibonacci(10000n))2090桁の答えが出力されます。54438373113565281338734260993750380135389184554695967026247715841208582865622349017083051547938960541173822675978026317384359584751116241439174702642959169925586334117906063048089793531476108466259072759367899150677960088306597966641965824937721800381441158841042480997984696487375337180028163763317781927941101369262750979509800713596718023814710669912644214775254478587674568963808002962265133111359929762726679441400101575800043510777465935805362502461707918059226414679005690752321895868142367849593880756423483754386342639635970733756260098962462668746112041739819404875062443709868654315626847186195620146126642232711815040367018825205314845875817193533529827837800351902529239517836689467661917953884712441028463935449484614450778762529520961887597272889220768537396475869543159172434537193611263743926337313005896167248051737986306368115003088396749587102619524631352447499505204198305187168321623283859794627245919771454628218399695789223798912199431775469705216131081096559950638297261253848242007897109054754028438149611930465061866170122983288964352733750792786069444761853525144421077928045979904561298129423809156055033032338919609162236698759922782923191896688017718575555520994653320128446502371153715141749290913104897203455577507196645425232862022019506091483585223882711016708433051169942115775151255510251655931888164048344129557038825477521111577395780115868397072602565614824956460538700280331311861485399805397031555727529693399586079850381581446276433858828529535803424850845426446471681531001533180479567436396815653326152509571127480411928196022148849148284389124178520174507305538928717857923509417743383331506898239354421988805429332440371194867215543576548565499134519271098919802665184564927827827212957649240235507595558205647569365394873317659000206373126570643509709482649710038733517477713403319028105575667931789470024118803094604034362953471997461392274791549730356412633074230824051999996101549784667340458326852960388301120765629245998136251652347093963049734046445106365304163630823669242257761468288461791843224793434406079917883360676846711185597501n154438373113565281338734260993750380135389184554695967026247715841208582865622349017083051547938960541173822675978026317384359584751116241439174702642959169925586334117906063048089793531476108466259072759367899150677960088306597966641965824937721800381441158841042480997984696487375337180028163763317781927941101369262750979509800713596718023814710669912644214775254478587674568963808002962265133111359929762726679441400101575800043510777465935805362502461707918059226414679005690752321895868142367849593880756423483754386342639635970733756260098962462668746112041739819404875062443709868654315626847186195620146126642232711815040367018825205314845875817193533529827837800351902529239517836689467661917953884712441028463935449484614450778762529520961887597272889220768537396475869543159172434537193611263743926337313005896167248051737986306368115003088396749587102619524631352447499505204198305187168321623283859794627245919771454628218399695789223798912199431775469705216131081096559950638297261253848242007897109054754028438149611930465061866170122983288964352733750792786069444761853525144421077928045979904561298129423809156055033032338919609162236698759922782923191896688017718575555520994653320128446502371153715141749290913104897203455577507196645425232862022019506091483585223882711016708433051169942115775151255510251655931888164048344129557038825477521111577395780115868397072602565614824956460538700280331311861485399805397031555727529693399586079850381581446276433858828529535803424850845426446471681531001533180479567436396815653326152509571127480411928196022148849148284389124178520174507305538928717857923509417743383331506898239354421988805429332440371194867215543576548565499134519271098919802665184564927827827212957649240235507595558205647569365394873317659000206373126570643509709482649710038733517477713403319028105575667931789470024118803094604034362953471997461392274791549730356412633074230824051999996101549784667340458326852960388301120765629245998136251652347093963049734046445106365304163630823669242257761468288461791843224793434406079917883360676846711185597501n注意することnumberとbigintは非互換number型とbigint型は非互換なので、計算や===での比較はコンパイルエラーになります。大小関係は使えるようです。true【参考】TypeScript/numberVsBigIntOperations.types代入もできません。'number'.ですが、これはcastすることで解決できます。guard記法は他の型同様に使えました。見渡していると、asUnitNとかasIntNなどの、width-bitの値に収めるユーティリティ関数があったり、BigUint64ArrayやBigInt64Arrayなどのの型も追加されているようです。【参考】TypeScript/lib.esnext.bigint.d.tsまた、従来の数値型とbigint型でベンチマークを取っている記事がありました。いつでもどこでもbigintを使えばいいというわけでもなさそうです。コメントをキャンセルメールアドレスが公開されることはありません。