
こんにちは、基幹システム本部リプレイス推進部のssssotaです。本記事では、TSKaigi 2026、ZOZOのスポンサーブースで実施したクイズを紹介・解説します。
はじめに
TSKaigi 2026は、2026年5月に実施されたTypeScriptに関するカンファレンスです。ZOZOはゴールドスポンサーとして参加し、スポンサーブースでTypeScriptやJavaScriptに関するクイズを実施しました。TSKaigi 2026のレポートは以下の記事にまとめていますので、あわせてご覧ください。
来場者の皆さんに体験してもらったクイズアプリはGitHubリポジトリで公開しています。RippleというUIフレームワークを用いてAIと共に実装しました。興味のある方はぜひリポジトリもご覧ください。
Rippleに興味のある方は、私がTSKaigi 2026で発表した登壇資料もあわせてご覧ください。
目次
Day 1
TypeScript
Q1. 次のコードはエラーになる? (tsconfig strict:true)
const a = 1 + '1';
- 実行時エラー
- コンパイルエラー
- ならない
答えと解説
正解: 3. ならない
JavaScriptではnumberとstringの + 演算はstringへの暗黙変換で評価され、TypeScriptもこのケースは許容するためコンパイル/実行どちらもエラーになりません。禁止したい場合はESLint (typescript-eslint) の restrict-plus-operands やOxlintの typescript/restrict-plus-operands ルールを使用する必要があります。
Q2. X の型は?
type X = unknown extends number ? true : false;
truefalseboolean
答えと解説
正解: 2. false
unknown は最上位型で number に代入可能ではないため、Conditional Typeは false 側に分岐します(参考:TypeScript Playground)
Q3. TypeScript 7 はなんの言語で開発されている?
- TypeScript
- Rust
- Go
答えと解説
正解: 3. Go
TypeScript 7 (tsgo) はネイティブ実装としてGoで書き直されています。
Q4. enum を TypeScript コンパイラに渡すとどのような JavaScript コードが出力される?
enum Hoge { a, b } const a: Hoge = Hoge.a;
- IIFEでHogeオブジェクトを構築する形に展開される
- const enumと同等にインライン定数へ展開される
答えと解説
正解: 1. IIFE で Hoge オブジェクトを構築する形に展開される
通常のenumはランタイムオブジェクトとして残り、IIFEで双方向マップを構築する形に展開されます。const enumはインライン化されます(参考:TypeScript Playground)
Q5. erasableSyntaxOnly でエラーになるのは?
class Hoge { private a?: number // A private b() {} // B constructor(private c: number) {} // C }
- A
- B
- C
答えと解説
正解: 3. C
parameter properties (constructor の private c) は、コード除去するだけでは等価にできずエラーになります。
JavaScript
Q6. 次のコードの出力は?
console.log(typeof null);
"null""undefined""object"
答えと解説
正解: 3. "object"
歴史的経緯により typeof null は "object" を返します(参考:typeof - JavaScript | MDN)
Q7. 次の式の結果は?
JSON.stringify({ nan: NaN })
{"nan":NaN}{"nan":null}- Error
答えと解説
正解: 2. {"nan":null}
JSONではNaNを表現できないため、JSON.stringify はNaNを null にシリアライズします(参考:JSON.stringify() - JavaScript | MDN)
ランタイム
Q8. 次の JavaScript ファイルを実行するとエラーになるのは?
globalThis.alert("Hello, TSKaigi!"); // node ./index.mjs // deno run ./index.mjs // bun run ./index.mjs
- Node.js
- Deno
- Bun
答えと解説
正解: 1. Node.js
alert はWeb互換APIとして Deno と Bun ではサポートされていますが、Node.jsには存在しません。
Q9. 次の JavaScript ファイルを実行するとエラーになるのは?
const obj = {}; obj.__proto__.a = 1; console.log(obj.a); // node ./index.mjs // deno run ./index.mjs // bun run ./index.mjs
- Node.js
- Deno
- Bun
答えと解説
正解: 2. Deno
Denoはセキュリティ上の理由から、 Object.prototype.__proto__ をサポートしていません。使用する場合は --unstable-unsafe-proto フラグを付けて実行する必要があります。Node.jsとBunはサポートしています。Node.jsでも --disable-proto フラグで無効化できます。
Q10. URL クラスはどの組織・仕様グループで標準化されている?
- WHATWG
- ECMA-262
- W3C
答えと解説
正解: 1. WHATWG
URLはWHATWGの URL Standard で標準化されています。
Day 2
TypeScript
Q1. X の型は?
type X = 1 extends number ? true : false;
truefalseboolean
答えと解説
正解: 1. true
リテラル型 1 は number のサブタイプなので、Conditional Typeの真側 true が選ばれます(参考:TypeScript Playground)
Q2. satisfies の正しい挙動は?
const x = { a: 1, b: 2 } satisfies { a: number; b: unknown };
xの型は{ a: number; b: number }xの型は{ a: number; b: unknown }- コンパイルエラー
答えと解説
正解: 1. x の型は { a: number; b: number }
satisfies は制約に適合することを検証しつつ、変数自身の推論結果(ここでは { a: number; b: number })を保持します(参考:TypeScript Playground)
Q3. TypeScript 7 (tsgo) の開発コードネームは?
- Breeze
- Corsa
- Strada
答えと解説
正解: 2. Corsa
tsgoの開発コードネームはCorsaです。Stradaは既存のJS実装、Breezeは社内PJの名称です(参考:A 10x Faster TypeScript)
Q4. 返り値の型が void で推論されるのは?
const A = () => { throw 'Oops'; }; function B() { throw 'Oops'; } const C = function () { throw 'Oops'; };
- A
- B
- C
答えと解説
正解: 2. B
関数宣言は return 文がない場合、返り値の型が void として推論されます。アロー関数や関数式は、 throw により返り値なしであることが推論され、返り値の型は never になります(参考:TypeScript Playground)
この挙動に関する詳細はTypeScriptのIssue #16608、Pull Request #8767、さらにTypeScriptのLead開発者が回答しているStackOverflow Inconsistent never type inferenceも参考になります。
JavaScript
Q5. 次のコードの結果は?
"use strict"; let str = "zozo"; str[0] = "s"; console.log(str);
"sozo""zozo"- Error
答えと解説
正解: 3. Error
文字列はプリミティブで不変です。strictモードでは str[0] はread only propertyとして代入不可、TypeErrorになります。ちなみに非strictモードでは代入は無視され、エラーにならず "zozo" が出力されます。
Q6. 次のうち JavaScript (ECMAScript) の予約語は?
stringwithusing
答えと解説
正解: 2. with
with はECMAScriptの予約語です。string はTypeScriptにおける型名、using は文脈依存キーワードで予約語ではありません。
Q7. 次の式の結果は?
(NaN == NaN) === (NaN === NaN)
truefalse- Error
答えと解説
正解: 1. true
NaNは自分自身とも等しくないため、== / === ともに false を返し、結果は false === false で true です。 == と === の違いは型変換の有無ですが、どちらもNaNには適用されないため、結果は同じになります。
ランタイム
Q8. 次の TypeScript ファイルを実行するとエラーになるのは?
const enum Hoge { a, b } console.log(Hoge.a); // node ./index.mts // deno run ./index.mts // bun run ./index.mts
- Node.js
- Deno
- Bun
答えと解説
正解: 1. Node.js
Node.jsのtype strippingはerasable syntaxのみを対象としておりconst enumを扱えません。DenoとBunはサポートしています。
Q9. globalThis.navigator.share() メソッドが使えるのは?
- iOS WebView
- Android WebView
- Deno
答えと解説
正解: 1. iOS WebView
Web Share API (navigator.share) はiOS WebViewではサポートされますが、Denoではサポートされていません。Android WebViewでは現在バグとして利用できない状態にあります(参考:Navigator: share() メソッド - ブラウザーの互換性、Web Share API and Media Session API don't work in Android WebView 40540400 - Chromium)
Q10. fetch API はどの組織・仕様グループで標準化されている?
- WHATWG
- ECMA-262
- W3C
答えと解説
正解: 1. WHATWG
fetchはWHATWGの Fetch Standard で標準化されています。
おわりに
以上、TSKaigi 2026スポンサーブースクイズの紹介でした。現地でクイズに挑戦してくださった皆様、改めてありがとうございました。かなりマニアックな内容が多く難しかったと思いますが、楽しんでいただけていれば幸いです。
また、TSKaigi 2026のスポンサーブースや、本記事で解説したクイズを通してZOZOのWebフロントエンドエンジニアに興味を持たれた方は、技術スタックなどがまとまったページをぜひご覧ください。
ZOZOでは、一緒にサービスを作り上げてくれる方を募集中です。ご興味のある方は、以下のリンクからぜひご応募ください。