Contents
環境構築
deno
通常TypeScriptはコンパイルしてJavaScriptに変換する必要があるが、サーバサイドでの実行であればdeno実行環境により、明示的にコンパイルしなくても自動でコンパイルしてくれるので、TypeScriptのまま実行できる。
マニュアル:https://deno-ja.vercel.app/manual
- インストール
curl -fsSL https://deno.land/x/install/install.sh | sh
- インストールディレクトリへの移動
mv .deno /usr/local/deno
- パスを設定する
export DENO_HOME=/usr/local/deno
export PATH=$DENO_HOME/bin:$PATH - 環境変数を再起動後も有効にする
echo "" >> /etc/bashrc
echo "# DENO ENVIRONMENT VARIABLE" >> /etc/bashrc
echo "export DENO_HOME=$DENO_HOME" >> /etc/bashrc
echo "export PATH=\$DENO_HOME/bin:\$PATH" >> /etc/bashrc - 実行確認
deno --help
基本文法
Hello World
console.log("Welcome to Deno!");
クラスを使ったサンプル
class MyClass { ONE_STR: "ONE"="ONE"; message: string; num: number; showMessage: boolean; constructor(m: string, n: number, s: boolean) { this.message = m; this.num = n; this.showMessage = s; } printMessageOrNum(): void { console.log(this.ONE_STR+"_"+(this.showMessage?this.message:this.num)); } getMessageAdd(plus: string): string { return this.message+plus; } } const myObj1:MyClass = new MyClass("abc", 10, true); myObj1.printMessageOrNum(); myObj1.showMessage=false; myObj1.printMessageOrNum(); console.log(myObj1.ONE_STR+"_"+myObj1.getMessageAdd("def"));
実行結果
[root@xxx ~]# deno run typescript_test.ts
ONE_abc
ONE_10
ONE_abcdef
コメント
- 一行
// comment
- 複数行
/*
*/
変数
共通単値変数
- 宣言
let i : number;
let str : string;
※number型変数
- 代入
i=1; str="abc";
- 参照
console.log(i); console.log(str);
プリミティブ型
- 数値:number
- 文字列:string
- 真偽値:boolean
- 大きな整数:bigint
- 何でも入る:any
- 関数・メソッドの戻り値専用で値がない:void
真偽値
true false
順序配列
- 宣言
let list: number[] = [1,2,3,4,5];
let list2: Array<number> = [1,2,3,4,5]; # 多次元配列 list3 = [[1,2,3,4,5],[6,7,8,9]]
- 内容表示
console.log(list);
- 後方追加
list.push(6);
- 前方追加
list.unshift(0);
- 途中追加
※追加する位置, 0, 追加する値list.splice(1, 0, 1.5);
- 代入
list[0]=-1;
- 配列長
list.length
- 参照
console.log(list[0]);
- 配列連結
list = list.concat(list);
- 要素削除
- 途中削除
list.splice(1, 0);
- 先頭削除
list.shift();
- 末尾削除
list.pop();
- 途中削除
連想配列
- 宣言
let map = {};
let map2: {id:number,value:string} = {id:1, value:"abc"};
- 代入
map.a = 789; map.b = "XXX";
map["a"] = 0;
- 存在確認
"a" in map "a" not in map
- 参照
print(map["a"])
- 順序参照
for key, value in map.items(): print(key, value)
- 削除
del map["a"]
集合(Set)
- 宣言
set = {1,2,3,1} # print(set) # {1, 2, 3}
- 存在確認
1 in set 5 not in set
比較演算
一致(数値・文字列)
int1 == int2
不一致(数値・文字列)
int1 != int2
数値大小
int1 < int2
int1 <= int2 int1 > int2
int1 >= int2
正規表現一致
- 前方一致
import re print(re.match(r"[a-z]+", "aaa123")!=None) # True print(re.match(r"[a-z]+", "123aaa")!=None) # False
- 部分一致
import re print(re.search(r"[a-z]+", "123")!=None) # False print(re.search(r"[a-z]+", "123aaa456")!=None) # True print(re.search(r"^[a-z]+$", "123aaa456")!=None) # False
OR
int1 == int2 or int3 != int4
AND
int1 == int2 && int3 != int4
NOT
int1 != int2
制御構文
for
for(let i=0;i<5;i++) { console.log(i); # 0-4
}
for each
- 配列変数から
for(const next of ["a","b","c"]) { console.log(elm);
}
while
let i=0; while(i < 10) { console.log(i); i+=1;
}
break
break
continue
continue
if
if(x < 0) console.log("x < 0");
if else
if(x < 0) console.log("x < 0"); else if(x == 0) console.log("x == 0"); else console.log("x > 0");
三項演算
val = n > 10 ? "big" : "small";
switch case
switch (str) {
case "A":
console.log("A");
break;
case "B":
console.log("B");
break;
default:
console.log("AB");
break;
}
文字列操作
値
- 複数行(ヒアドキュメント)
バッククォートで囲む
str = `123,
456,
ABC`;
連結
str1+str2
部分切り取り
end-1文字目までが取得できる。endを省略すると末尾までとなる。
str.substring(start, end);
置換
"abcdef".replace(/bcd/i, "BBB");
探索(indexOf)
"abcde".indexOf("d") #3
外部ファイルへコードの分割
インポート
エクスポートした関数や型、値等は別ファイルでインポートして利用する。標準では下記の様に対象ファイル名を相対パスで指定してインポートする
import { functionA } from '../lib/MyLibA.ts';
ただし相対パスではファイルパスが変わるたびに変更箇所が多くなる。そのため、tsconfig.jsonファイルに設定を追加することで絶対パスとして指定できる。
import { functionA } from 'lib/MyLibA.ts';
tsconfig.jsonには以下の様に記述する。
{
"compilerOptions": {
"baseUrl": "src"
}
}