索引:記号とキーワード
JavaScriptやTypeScriptのコードには?.のような記号やasのようなキーワードが使われます。こういった記号やキーワードはGoogleで検索しづらく、意味を調べるのは難しいものです。
この索引は、JavaScriptとTypeScriptの記号やキーワードから、その名前や意味を調べられるようにするためのものです。コードを読んでいて未知の記号やキーワードに出くわしたら、その意味や使い方を調べる手がかりにしてください。
ここで扱う記号とキーワードには、JavaScript由来のもの、つまり、JavaScriptとTypeScriptに共通して使えるものと、TypeScriptでのみ使えるものを併記しています。JavaScript由来のものにはのマークを、TypeScript固有のものには
マークを表示しています。
記号#
! 論理否定演算子 (logical not operator)
#
真値と偽値を反転します。
! 非Nullアサーション (non-null assertion operator)
#
値がnullやundefinedでないことを宣言し、コンパイラーに値を非Nullとして解釈させます。
typescriptfunction firstChar(text: string | undefined) {// コンパイルエラーにならないreturn text!.charAt(0);}
typescriptfunction firstChar(text: string | undefined) {// コンパイルエラーにならないreturn text!.charAt(0);}
! Definite Assignment Assertion演算子 (definite assignment assertion operator)
#
クラスのプロパティが型アノテーションで示された型でセットされていることをコンパイラーに伝える記号です。
typescriptclass Example {public foo!: number;}
typescriptclass Example {public foo!: number;}
または、変数の値が型アノテーションで示された型でセットされていることをコンパイラーに伝える記号です。
typescriptlet numbers!: number[];
typescriptlet numbers!: number[];
!! Double Bang
#
double bangはJavaScriptで定義されている演算子ではなく、論理否定演算子を2つ連続したイディオムです。値がtruthyかを求めるときに使われます。
!= 不等価演算子 (inequality operator)
#
左の値と右の値が異なるか判定します。型が異なる場合は型変換されて比較されます。
javascript"1" != 1; // false
javascript"1" != 1; // false
!== 厳密不等価演算子 (strict inequality operator)
#
型を含めて左の値と右の値が異なるか判定します。
javascript1 !== 2; // true
javascript1 !== 2; // true
" 文字列リテラル (string literal)
#
"foo"のように文字列リテラルの開始と終了に使われる記号です。
# プライベートプロパティ (private property)
#
クラスのプロパティのうち#で始まるプロパティはプライベートになります。
javascriptclass ExampleClass {#privateField;#privateMethod() {}static #PRIVATE_STATIC_FIELD;static #privateStaticMethod() {}}
javascriptclass ExampleClass {#privateField;#privateMethod() {}static #PRIVATE_STATIC_FIELD;static #privateStaticMethod() {}}
$ ドル変数 (dollar variable)
#
慣習的にjQueryなどのライブラリで変数として使われることがあります。変数名として$が使われる場合は、JavaScriptとしては変数以上の特別な意味はありません。
$ 文字列中の変数展開 (placeholder)
#
テンプレートリテラル内で変数を展開するときに用いられる記号です。
javascriptconst name = "John";console.log(`Hi, ${name}.`); // "Hi, John."
javascriptconst name = "John";console.log(`Hi, ${name}.`); // "Hi, John."
% 剰余演算子 (reminder operator)
#
左の値を右の値で割った余りを計算します。
javascript12 % 5; // 2
javascript12 % 5; // 2
%= 剰余代入 (reminder assignment)
#
左の変数の値に右の値で割り算した余りを左の変数に割り当てます。
& ビット論理積 (bitwise and)
#
左の値と右の値で共にビットが1である位置のビットを1に します。
javascriptconst a = 1; // 00000001const b = 5; // 00000101console.log(a & b); // 00000001// 出力: 1
javascriptconst a = 1; // 00000001const b = 5; // 00000101console.log(a & b); // 00000001// 出力: 1
& インターセクション型 (intersection type)
#
複数の型を組み合わせたインターセクション型を定義します。
typescriptinterface Swordsman {sword: string;}interface Wizard {magic: string;}type MagicalSwordsman = Swordsman & Wizard;
typescriptinterface Swordsman {sword: string;}interface Wizard {magic: string;}type MagicalSwordsman = Swordsman & Wizard;
&= ビット論理積代入 (bitwise and assignment)
#
左の変数の値と右の値で共にビットが1である位置のビットを1にした結果を左の変数に割り当てます。
javascriptlet a = 1; // 00000001const b = 5; // 00000101a &= b;console.log(a); // 00000001// 出力: 1
javascriptlet a = 1; // 00000001const b = 5; // 00000101a &= b;console.log(a); // 00000001// 出力: 1
&& 論理積 (logical and)
#
すべての真偽値がtrueのときにtrueを返します。そうでない場合にfalseを返します。
&&= 論理積代入 (logical and assignment)
#
左の変数の真偽値と右の真偽値の論理積の結果を左の変数に割り当てます。
javascriptlet a = true;let b = false;a &&= b;console.log(a); // false
javascriptlet a = true;let b = false;a &&= b;console.log(a); // false
' 文字列リテラル (string literal)
#
'foo'のように文字列リテラルの開始と終了に使われる記号です。
() 即時実行関数の一部 (IIFE: immediately invoked function expression)
#
定義されるとすぐ実行される即時実行関数式(IIFF; Immediately Invoked Function Expression)の一部に用いられる書き方です。即時実行関数式そのものがデザインパターンで、その一部である()は関数呼び出しのカッコであり、JavaScriptの特別な演算子や構文というわけではありません。即時実行関数式は即時関数と呼ばれることがあります。
javascript(function () {})();// ^^(function () {})();// ^^(() => {})();// ^^
javascript(function () {})();// ^^(function () {})();// ^^(() => {})();// ^^
* 乗算演算子 (multiplication operator)
#
左の値と右の値を掛け算します。
* ジェネレーター関数の宣言 (generator)
#
Generatorオブジェクトを返すジェネレーター関数を宣言するときに用いられる記号です。
javascriptfunction* numberGenerator() {yield 1;yield 2;yield 2;}
javascriptfunction* numberGenerator() {yield 1;yield 2;yield 2;}
* yield*式 (yield)
#
別のジェネレーターに移譲する式を書くときに用いられる記号です。
javascriptfunction* func1() {yield 123;}function* func2() {yield* func1();// ^ここ}
javascriptfunction* func1() {yield 123;}function* func2() {yield* func1();// ^ここ}
*= 乗算代入 (multiplication assignment)
#
左の変数の値と右の値を掛け算した結果を左の変数に割り当てます。
** べき乗演算子 (exponentiation)
#
左の値を右の値でべき乗します。
javascript2 ** 3; // 8
javascript2 ** 3; // 8
**= べき乗代入 (exponentiation assignment)
#
左の変数の値を右の値でべき乗した結果を左の変数に割り当てます。
+ 単項正値演算子
#
Number型に変換します。
javascript+"1"; // 1
javascript+"1"; // 1
+ 加算演算子 (addition operator)
#
2つの値を足し算します。
+ 文字列結合演算子 (concatenation operator)
#
2つの文字列を結合します。
+ 修飾子の付加
#
readonlyや?などの修飾子を追加します。
何も指定しない場合は暗黙的に+が付与されるので+を実際に利用する機会はおそらくありません。
typescripttype MyPartial<T> = {[k in keyof T]+?: T[k];};type MyReadonly<T> = {+readonly [k in keyof T]: T[k];};
typescripttype MyPartial<T> = {[k in keyof T]+?: T[k];};type MyReadonly<T> = {+readonly [k in keyof T]: T[k];};
+= 加算代入 (addition assignment)
#
左の変数の値とに右の値を足し算した結果を左の変数に割り当てます。
++ インクリメント (increment)
#
変数に1を足す演算子です。
javascriptlet x = 3;x++;console.log(x); // 4
javascriptlet x = 3;x++;console.log(x); // 4
, 関数引数の区切り
#
複数の引数を関数に与えたり、複数の引数を受け取る関数宣言に用いる記号です。
javascriptfunction plus(x, y, z) {return x + y + z;}plus(1, 2, 3);
javascriptfunction plus(x, y, z) {return x + y + z;}plus(1, 2, 3);
, 配列要素の区切り
#
複数の要素を持つ配列を宣言するときに用いる記号です。
javascriptconst numbers = [1, 2, 3];
javascriptconst numbers = [1, 2, 3];
, オブジェクトプロパティの区切り
#
複数のプロパティを持つオブジェクトを宣言するときに用いる記号です。
javascriptconst data = {property1: 1,property2: true,property3: "hello",};
javascriptconst data = {property1: 1,property2: true,property3: "hello",};
, タプル型の要素の区切り
#
複数の要素を持つタプル型を宣言するときに用いる記号です。
typescripttype Tuple = [number, string, boolean];
typescripttype Tuple = [number, string, boolean];
, カンマ演算子 (comma operator)
#
左から右に式を評価をして、一番右の評価した値を返します。
javascriptlet x = -1;const a = (x++, x++, x > 0);console.log(a); // true
javascriptlet x = -1;const a = (x++, x++, x > 0);console.log(a); // true
- 単項負値演算子
#
正負を反転してNumber型に変換します。
javascript-"1"; // -1
javascript-"1"; // -1
- 減算演算子 (subtraction operator)
#
2つの値を引き算します。
- 修飾子の削除
#
readonlyや?などの修飾子を削除します。
typescripttype MyRequired<T> = {[k in keyof T]-?: T[k];};type Writable<T> = {-readonly [k in keyof T]: T[k];};
typescripttype MyRequired<T> = {[k in keyof T]-?: T[k];};type Writable<T> = {-readonly [k in keyof T]: T[k];};
-= 減算代入 (subtraction assignment)
#
左の変数の値から右の値を引き算した結果を左の変数に割り当てます。
-- デクリメント (decrement)
#
変数に1を引き算する演算子です。
javascriptlet x = 3;x--;console.log(x); // 2
javascriptlet x = 3;x--;console.log(x); // 2
. プロパティへのアクセス (dot operator)
#
オブジェクトのプロパティにアクセスするときに用いる記号です。
javascriptconst object = { property: 123 };object.property; // 123
javascriptconst object = { property: 123 };object.property; // 123
... スプレッド構文 (spread syntax)
#
配列などの反復可能オブジェクトを関数の引数にする構文です。
javascriptfunction sum(x, y, z) {return x + y + z;}const numbers = [1, 2, 3];console.log(sum(...numbers)); // 6
javascriptfunction sum(x, y, z) {return x + y + z;}const numbers = [1, 2, 3];console.log(sum(...numbers)); // 6
または、配列などの反復可能オブジェクトを配列要素に展開する構文です。
javascriptconst numbers = [1, 2, 3];const newNumbers = [0, ...numbers, 4];console.log(newNumbers); // [ 0, 1, 2, 3, 4 ]
javascriptconst numbers = [1, 2, 3];const newNumbers = [0, ...numbers, 4];console.log(newNumbers); // [ 0, 1, 2, 3, 4 ]
または、オブジェクトのプロパティを展開する構文です。
javascriptconst object = { x: 1, y: 2 };const newObject = { ...object, z: 3 };console.log(newObject); // { x: 1, y: 2, z: 3 }
javascriptconst object = { x: 1, y: 2 };const newObject = { ...object, z: 3 };console.log(newObject); // { x: 1, y: 2, z: 3 }
... 残余構文 (rest syntax)
#
関数の残りの引数をひとつの配列として受け取るのに用いられる構文です。
javascriptfunction func(a, b, ...rest) {return rest;}console.log(func(1, 2, 3, 4, 5)); // [ 3, 4, 5 ]
javascriptfunction func(a, b, ...rest) {return rest;}console.log(func(1, 2, 3, 4, 5)); // [ 3, 4, 5 ]
または、配列などの反復可能オブジェクトの残りの要素を取り出す構文です。
javascriptconst numbers = [1, 2, 3, 4, 5];const [first, second, ...rest] = numbers;console.log(rest); // [ 3, 4, 5 ]
javascriptconst numbers = [1, 2, 3, 4, 5];const [first, second, ...rest] = numbers;console.log(rest); // [ 3, 4, 5 ]
または、オブジェクトの残りのプロパティを取り出す構文です。
javascriptconst object = { a: 1, b: 2, c: 3, d: 4 };const { a, b, ...rest } = object;console.log(rest); // { c: 3, d: 4 }
javascriptconst object = { a: 1, b: 2, c: 3, d: 4 };const { a, b, ...rest } = object;console.log(rest); // { c: 3, d: 4 }
/ 除算演算子 (division operator)
#
左の値を右の値で割り算します。
/ 正規表現リテラル (regular expression literal)
#
/[0-9]+/のような正規表現リテラルの前後に書かれる記号です。
/= 除算代入 (division assignment)
#
左の変数の値を右の値で割り算した結果を左の変数に割り当てます。
// 一行コメント (one line comment)
#
行コメントの開始を表す記号です。
/* 複数行コメント (multiline comment)
#
複数行コメントの開始を表す記号です。
javascript/*コメント*/
javascript/*コメント*/
/** JSDoc#
慣習的にJSDocなどのドキュメンテーションコメントの開始を表す記号です。これはJavaScriptやTypeScriptの構文ではなく、複数行コメントを用いたドキュメンテーションに慣習的に用いられるものです。
: オブジェクトの一部
#
オブジェクトプロパティのキーと値の対関係を表すのに用いられる記号です。
javascriptconst object = { a: 1, b: 2, c: 3, d: 4 };
javascriptconst object = { a: 1, b: 2, c: 3, d: 4 };
: 三項演算子の一部 (conditional operator)
#
a ? b : cのような三項演算子のelseを表すのに用いられる記号です。
: 型アノテーション (type annotation)
#
変数の型アノテーションに用いられる記号です。
typescriptconst variable: number = 20;
typescriptconst variable: number = 20;
または、関数の引数や戻り値の型アノテーションに用いられる記号です。
typescriptfunction numberToString(x: number): string {return x.toString();}
typescriptfunction numberToString(x: number): string {return x.toString();}
< 小なり演算子 (less than operator)
#
左の値が右の値よりも小さいか判定します。
< ジェネリクス (generic)
#
ジェネリクスの型引数の開始に用いられる記号です。
typescriptfunction func1<T>(x: T) {}const result = func<string>("hello");
typescriptfunction func1<T>(x: T) {}const result = func<string>("hello");
< JSX
#
JSXと呼ばれるXMLリテラルの開始に現れる記号です。
Hello.tsxtypescriptfunction Hello() {return <div>HELLO</div>;}
Hello.tsxtypescriptfunction Hello() {return <div>HELLO</div>;}
< 型アサーション (type assertion)
#
型アサーションに用いられる記号です。asの別の書き方です。
typescriptlet someValue: unknown = "this is a string";let strLength: number = (<string>someValue).length;
typescriptlet someValue: unknown = "this is a string";let strLength: number = (<string>someValue).length;
<= 小なりイコール演算子 (less than or equal)
#
左の値が右の値以下か判定します。
<< ビット左シフト演算子 (left shift operator)
#
左の値のビットを右の値の数だけ左にずらします。
javascriptconst a = 1; // 00000001const b = 3;console.log(a << b); // 00001000// 出力: 8
javascriptconst a = 1; // 00000001const b = 3;console.log(a << b); // 00001000// 出力: 8
<<= 左シフト代入 (left shift assignment)
#
左の変数の値のビットを右の値の数だけ左にずらした結果を左の変数に割り当てます。
javascriptlet a = 1; // 00000001const b = 3;a <<= b;console.log(a); // 00001000// 出力: 8
javascriptlet a = 1; // 00000001const b = 3;a <<= b;console.log(a); // 00001000// 出力: 8
= 代入演算子 (assignment)
#
左の変数に右の値を割り当てます。
== 等価演算子 (equality)
#
左の値と右の値が等しいか判定します。型が異なる場合は型変換されて比較されます。
javascript"1" == 1; // true
javascript"1" == 1; // true
=== 厳密等価演算子 (strict equality)
#
型を含めて左の値と右の値が等しいか判定します。
javascript"1" === 1; // false
javascript"1" === 1; // false
=> アロー関数の一部 (arrow function)
#
アロー関数の引数と関数ボディーの間に書かれる記号です。
javascriptconst increment = (num) => num + 1;// ^^^ 引数// ^^^^^^^ 関数ボディ
javascriptconst increment = (num) => num + 1;// ^^^ 引数// ^^^^^^^ 関数ボディ
> 大なり演算子 (greater than)
#
左の値が右の値よりも大きいか判定します。
>= 大なりイコール演算子 (greater than or equal)
#
左の値が右の値以上か判定します。
>> ビット右シフト演算子 (right shift)
#
左の値のビットを右の値の数だけ右にずらします。
javascriptconst a = 8; // 00001000const b = 3;console.log(a >> b); // 00000001// 出力: 1
javascriptconst a = 8; // 00001000const b = 3;console.log(a >> b); // 00000001// 出力: 1
>>= 右シフト代入 (right shift assignment)
#
左の変数の値のビットを右の値の数だけ右にずらした結果を左の変数に割り当てます。
>>> 符号なし右シフト演算子 (unsigned right shift)
#
左の値のビットを右の値の数だけ右にずらします。左に入る符号ビットは常に0になります。
javascriptconst a = -2; // 11111111111111111111111111111110const b = 3;console.log(a >>> b); // 00011111111111111111111111111111// 出力: 536870911
javascriptconst a = -2; // 11111111111111111111111111111110const b = 3;console.log(a >>> b); // 00011111111111111111111111111111// 出力: 536870911
>>>= 符号なし右シフト代入 (unsigned right shift assignment)
#
左の変数の値のビットを右の値の数だけ右にずらした結果を左の変数に割り当てます。左に入る符号ビットは常に0になります。
? 三項演算子の一部 (conditional operator)
#
三項演算子a ? b : cの一部で、条件式の終わりに置かれる記号です。
? オプション修飾子 (optional property)
#
オブジェクトのプロパティを任意プロパティとして定義します。
typescriptinterface User {name: string; // name は必須age?: number; // age は任意}const user: User = { name: "taro" };
typescriptinterface User {name: string; // name は必須age?: number; // age は任意}const user: User = { name: "taro" };
または、関数の引数を必須ではなくします。
typescriptfunction func(x?: number) {}func(); // xがなくてもOK
typescriptfunction func(x?: number) {}func(); // xがなくてもOK
?. オプショナルチェーン (optional chaining)
#
プロパティのアクセス元がnullまたはundefinedのときにエラーを発生させずにundefinedを返します。
javascriptconst user = null;console.log(user.name); // Cannot read property 'name' of nullconsole.log(user?.name); // undefined
javascriptconst user = null;console.log(user.name); // Cannot read property 'name' of nullconsole.log(user?.name); // undefined
?? Null合体 (nullish coalescing operator)
#
左の値がnullまたはundefinedのときに右の値を返します。そうでない場合は左の値を返します。
javascriptconsole.log(undefined ?? 1); // 1console.log(2 ?? 1); // 2
javascriptconsole.log(undefined ?? 1); // 1console.log(2 ?? 1); // 2
??= Null合体代入 (logical nullish assignment)
#
左の変数の値がnullまたはundefinedの場合のみ右の値を左の変数に割り当てます。
javascriptconst user1 = { name: undefined };user1.name ??= "taro";console.log(user1.name); // taroconst user2 = { name: "kaori" };user2.name ??= "taro";console.log(user2.name); // kaori
javascriptconst user1 = { name: undefined };user1.name ??= "taro";console.log(user1.name); // taroconst user2 = { name: "kaori" };user2.name ??= "taro";console.log(user2.name); // kaori
@ デコレーター (decorator)
#
デコレーターはクラスやクラスメンバーに注釈を追加するもので、デコレーターを使うのに用いられる記号です。
[ 配列リテラル (array literal notation)
#
[1, 2, 3]のような配列リテラルの開始に用いられる記号です。
[ アクセッサー (bracket notation)
#
配列の要素やオブジェクトのプロパティにアクセスするときに用いられる記号です。
javascriptconst numbers = [1, 2, 3];numbers[0]; // 1const object = { a: 1, b: 2 };object["a"]; // 1
javascriptconst numbers = [1, 2, 3];numbers[0]; // 1const object = { a: 1, b: 2 };object["a"]; // 1
[ 配列の分割代入 (destructuring assignment)
#
配列などの反復可能オブジェクトの分割代入の開始に用いられる記号です。
javascriptconst numbers = [1, 2, 3];const [first, ...rest] = numbers; // 分割代入console.log(first, rest); // 1 [ 2, 3 ]// 分割代入function func([first, ...rest]) {console.log(first, rest);}func([1, 2, 3]); // 1 [ 2, 3 ]
javascriptconst numbers = [1, 2, 3];const [first, ...rest] = numbers; // 分割代入console.log(first, rest); // 1 [ 2, 3 ]// 分割代入function func([first, ...rest]) {console.log(first, rest);}func([1, 2, 3]); // 1 [ 2, 3 ]
[ インデックス型 (index signature)
#
インデックス型(index signature)の開始に用いられる記号です。
typescripttype StringKeysAndStringValues = {[key: string]: string;};
typescripttype StringKeysAndStringValues = {[key: string]: string;};
[] 配列型 (array type)
#
配列型を表現するのに用いられる記号です。
typescriptlet names: string[];type FooList = Foo[];
typescriptlet names: string[];type FooList = Foo[];
\ 文字列エスケープシーケンス (escaping character)
#
文字列のエスケープシーケンスの開始に用いられる記号です。
javascriptconst lineBreak = "\n";
javascriptconst lineBreak = "\n";
^ ビット排他的論理和 (bitwise xor)
#
左の値と右の値でビットの値が異なる位置のビットを1にします。
javascriptconst a = 1; // 00000001const b = 5; // 00000101console.log(a ^ b); // 00000100// 出力: 4
javascriptconst a = 1; // 00000001const b = 5; // 00000101console.log(a ^ b); // 00000100// 出力: 4
^= ビット排他的論理和代入 (bitwise xor assignment)
#
左の変数の値と右の値でビットの値が異なる位置のビットを1にした結果を左の変数に割り当てます。
_ 数値の区切り文字
#
数値の可読性のために、桁区切りとして用いられる記号です。
javascriptconst hyakuman = 1_000_000;
javascriptconst hyakuman = 1_000_000;
_ アンダースコア変数
#
慣習的にlodashなどのライブラリで変数として使われることがあります。変数名として_が使われる場合は、JavaScriptとしては変数以上の特別な意味はありません。
また、慣習的に使わない変数の受け取り先に使われることがあります。たとえば、2つの引数を受け取るコールバック関数で、第2引数だけを使う場合、第1引数をアンダースコアにする書き方をするコードが中にはあります。
javascript[1, 2, 3].map((_, index) => {// _ は 1, 2, 3のような要素値。それを使わないという意味で _ にしている});
javascript[1, 2, 3].map((_, index) => {// _ は 1, 2, 3のような要素値。それを使わないという意味で _ にしている});
` テンプレートリテラル (template literal)
#
テンプレートリテラル(テンプレート文字列)の前後に置かれる記号です。
javascript`string text`;
javascript`string text`;
{ ブロック文 (block)
#
if文やfor文などの構文に付随して使われる記号です。
javascriptif (isOK) {// ...} else {// ...}
javascriptif (isOK) {// ...} else {// ...}
if文やfor文などの構文を伴わないブロック文は、単に変数のスコープを分けることを目的にしていることがあります。
javascript{const value = 1;}{const value = 2; // 上と同じ変数名で初期化しているが、スコープが別になるためエラーにならない。}
javascript{const value = 1;}{const value = 2; // 上と同じ変数名で初期化しているが、スコープが別になるためエラーにならない。}
{ オブジェクトの分割代入 (destructuring assignment)
#
オブジェクトの分割代入に用いられる記号です。
javascriptconst object = { a: 1, b: 2, c: 3, d: 4 };const { a, b, ...rest } = object; // 分割代入console.log(a, b, rest); // 1 2 { c: 3, d: 4 }// 分割代入function func({ a, b, ...rest }) {console.log(a, b, rest);}func(object); // 1 2 { c: 3, d: 4 }
javascriptconst object = { a: 1, b: 2, c: 3, d: 4 };const { a, b, ...rest } = object; // 分割代入console.log(a, b, rest); // 1 2 { c: 3, d: 4 }// 分割代入function func({ a, b, ...rest }) {console.log(a, b, rest);}func(object); // 1 2 { c: 3, d: 4 }
| ビット論理和 (bitwise or)
#
左の値と右の値でどちらのビットが1である位置のビットを1にします。
javascriptconst a = 0b010;const b = 0b101;console.log((a | b) === 0b111); // true
javascriptconst a = 0b010;const b = 0b101;console.log((a | b) === 0b111); // true
| ユニオン型 (union type)
#
複数の型を組み合わせたユニオン型を定義します。
typescripttype ID = string | number;const id1 = "e29b41"; // OKconst id2 = 100; // OKconst id3 = true; // ERROR
typescripttype ID = string | number;const id1 = "e29b41"; // OKconst id2 = 100; // OKconst id3 = true; // ERROR
|= ビット論理和代入 (bitwise or assignment)
#
左の変数の値と右の値でどちらかがのビットが1である位置のビットを1にした結果を左の変数に割り当てます。
|| 論理和 (logical or)
#
ひとつでも真偽値がtrueのときにtrueを返します。そうでない場合にfalseを返します。
||= 論理和代入 (logical or assignment)
#
左の変数の真偽値と右の真偽値の論理和の結果を左の変数に割り当てます。
~ ビット否定演算子 (bitwise not)
#
ビットを反転します。
javascriptconst a = 1; // 00000001console.log(~a); // 11111110// 出力: -2
javascriptconst a = 1; // 00000001console.log(~a); // 11111110// 出力: -2
~~ Double Tilde
#
ビット否定演算子を2つ重ねたもので、小数点以下を消し去る計算をするイディオムです。JavaScriptにこういう演算子があるわけではなく慣習的なものです。double tildeの計算結果は、正の数についてはMath.floorと同じに、負の数はMath.ceilと同じになります。
javascript~~1.5; // 1Math.floor(1.5); // 1Math.ceil(1.5); // 2~~-1.5; // -1Math.floor(-1.5); // -2Math.ceil(-1.5); // -1
javascript~~1.5; // 1Math.floor(1.5); // 1Math.ceil(1.5); // 2~~-1.5; // -1Math.floor(-1.5); // -2Math.ceil(-1.5); // -1
キーワード#
as 型アサーション (type assertion)
#
TypeScriptコンパイラーが解釈した型を上書きする「型アサーション」に用いられるキーワードです。
const const
#
ブロックスコープを持つ定数定義です。スコープ内では再代入も再宣言もできません。
get ゲッター (get)
#
オブジェクトのプロパティが参照されたときに対応する関数が呼ばれます。
javascriptconst exam = {scores: [50, 70, 90, 80, 100, 60],get best() {return Math.max(...this.scores);},};console.log(exam.best); // 100
javascriptconst exam = {scores: [50, 70, 90, 80, 100, 60],get best() {return Math.max(...this.scores);},};console.log(exam.best); // 100
is 型アサーション関数の一部 (user-defined type guard)
#
型ガードに用いる型アサーション関数の戻り値の型アノテーション部分に用いられるキーワードです。
typescriptfunction isDuck(animal: Animal): animal is Duck {}
typescriptfunction isDuck(animal: Animal): animal is Duck {}
keyof keyof型演算子 (keyof)
#
オブジェクト型からプロパティ名を型として返す型演算子です。
n bigintリテラル (bigint literal)
#
数字がbigintリテラルであることを表すのに用いる記号です。
javascript100n; // bigint型の100
javascript100n; // bigint型の100
typeof typeof演算子 (typeof)
#
与えられた値の型を表す文字列を返します。
javascriptconsole.log(typeof 123); // "number"
javascriptconsole.log(typeof 123); // "number"
typeof typeof型演算子 (typeof)
#
変数から型を抽出する演算子です。
set セッター (set)
#
オブジェクトのプロパティを変更するときに対応する関数が呼ばれます。
javascriptconst prize = {latest: "",history: [],set winner(winner) {this.latest = winner;this.history.push(winner);},};prize.winner = "Stanislas Wawrinka";prize.winner = "Rafael Nadal Parera";prize.winner = "Novak Đoković";console.log(prize.latest); // "Novak Đoković"console.log(prize.history); // [ 'Stanislas Wawrinka', 'Rafael Nadal Parera', 'Novak Đoković' ]
javascriptconst prize = {latest: "",history: [],set winner(winner) {this.latest = winner;this.history.push(winner);},};prize.winner = "Stanislas Wawrinka";prize.winner = "Rafael Nadal Parera";prize.winner = "Novak Đoković";console.log(prize.latest); // "Novak Đoković"console.log(prize.history); // [ 'Stanislas Wawrinka', 'Rafael Nadal Parera', 'Novak Đoković' ]
void void演算子 (void)
#
戻り値をundefinedにします。
javascriptconsole.log(void 123); // undefined
javascriptconsole.log(void 123); // undefined
void void型 (void)
#
戻り値がundefinedあるいはない場合に使用します。
typescriptfunction returnUndefined(num: number): void {if (num === 0) {return undefined;}return;}
typescriptfunction returnUndefined(num: number): void {if (num === 0) {return undefined;}return;}