TypeScriptでconstとreadonlyを使い分ける

TypeScriptで、読み込み専用・変更不可にするにはconstやreadonlyを使用します。

constとreadonlyは使う場面が異なり、

プロパティにはreadonly
変数にはconst

を使用します。

プロパティにconstを使うと文法エラーになります。

interface Point {
    const x: number;  // error TS1005: ';' expected.
    const y: number;  // error TS1005: ';' expected.
}

変数にreadonlyを使ってもエラーになります。

readonly greeting: string = "hello"; //error TS1128: Declaration or statement expected.

正しくは、プロパティにはreadonly

interface Point {
    readonly x: number;
    readonly y: number;
}

let p1: Point = { x: 10, y: 20 };
p1.x = 5; // error TS2540: Cannot assign to 'x' because it is a constant or a read-only property.

変数にはconstを使います。

const greeting: string = "hello";
greeting = ""; // error TS2540: Cannot assign to 'greeting' because it is a constant or a read-only property.

TypeScriptでthisの型を指定する

JavaScriptでは、thisの型が変わることがあります。

class Sample {
    hello() { console.log(this.constructor.toString()); }
}

const sample = new Sample();
sample.hello(); //(1) => function Sample() {}

let hello = sample.hello; 
hello(); //(2) => function Object() { [native code] }

(1)ではthisはSample型でしたが、(2)ではObject型になりました。

関数の使い方を誤ってthisが想定外の型になり、思わぬエラーになることがあります。

TypeScriptでは、関数の1番目の引数をthisにすることで、thisの型を指定できます。

class Sample {
    hello(this: Sample) { console.log(this.constructor.toString()); }
}

thisは仮の引数であり、実際には存在しません。
関数を呼び出すときは、引数thisを指定する必要はありません。

先ほどのコードをコンパイルすると(2)のところで、コンパイルエラーになります。

const sample = new Sample();
sample.hello();

let hello = sample.hello;
hello(); //(2) error TS2684: The 'this' context of type 'void' is not assignable to method's 'this' of type 'Sample'.

コンパイラに「–noImplicitThis」オプションを渡すと、関数内でthisの型を指定せずにthisを使うとエラーになります。

class Sample {
    name: string = "hello";
}
function hello() { console.log(this.name); }

hello.bind(new Sample())(); //=> error TS2683: 'this' implicitly has type 'any' because it does not have a type annotation.

JavaScriptではthisにまつわるトラブルが起こりがちです。

TypeScriptで「–noImplicitThis」をつけてthisの型を忘れずに指定すれば、安全なプログラミングができそうです。

WindowsのKeePassでパスワードを入力するときに日本語入力をOFFにする

KeePassとは

KeePassは無料で使えるパスワード管理ソフトです。

メールやFacebook、Amazon、その他Webサイトで同じパスワードを使い回していると、一つのサービスでパスワードが漏洩したとき、他のすべてのサービスのアカウントも危険にさらされます。

とはいえ、サービスごとに異なるパスワードを使い分けると、たくさんのパスワードを管理するのが大変になります。

そこで、パスワード管理ソフトの出番です。

パスワード管理ソフトは有名なものがいくつかありますが、比較した結果、KeePassを使うことにしました。

KeePassはオープンソースで開発されているので、無料で使用でき、Windows/macOS/Android/iOSでも使用できます。

WindowsのKeePassでパスワードを入力するときに日本語入力をOFFにする

しばらくの間、KeePassを使っていて気になったところがありました。

KeePassには、入力欄に自動で入力する機能があります。
日本語入力がONになった状態で自動入力機能を実行すると、日本語入力がONのまま、ひらがなでユーザー名やパスワードを入力してしまいます。

そこで、KeePassの自動入力を行うときに、日本語入力をOFFにする方法を調べました。

日本語入力は、変換キーでON、無変換キーでOFFにするように設定しています。

KeePassの自動入力実行時に、無変換キーを押すことができれば解決です。

KeePassでは無変換キーは「{VKEY 29}」になります。
「{VKEY 29}」をユーザー名の前に追加すれば、入力前に日本語入力をOFFにできます。

設定方法は次のようになります。

KeePassを起動したら、フォルダーを右クリックして、「グループを編集」を選択します。

「自動入力」タブを選択します。

「標準の手順を上書き」をチェックして、次のように入力します。

{VKEY 29}{USERNAME}{TAB}{PASSWORD}{ENTER}

「OK」ボタンを押して、設定を反映します。

以上で完了です。

参考

次のページを参考にしました。

ありがとうございました。

WindowsのATOKで日本語入力のON/OFFを変換/無変換キーに割り当てる

Windowsでは「全角/半角」キーを押して日本語入力のON/OFFを切り替えます。

「変換」キーで日本語入力をONに、「無変換」キーで日本語入力をOFFにするように設定すると、現在の日本語入力の状態がONかOFFかを意識する必要がなくなり、入力切り替えのトラブルがなくなります。

Windows 10のATOK 2017で、変換キーを押すと日本語入力をONにし、無変換キーを押すと日本語入力をOFFにする設定方法です。
他のバージョンのATOKも同じ手順で設定できます。

タスクバーのATOKのメニューアイコンをクリックして、ポップアップメニューから「プロパティ(環境設定)」を選択、または日本語入力をONにして「CTRL+F12」キーを押します。

「ATOKプロパティ」画面が表示されました。

「キー・ローマ字・色」タブを選択し、スタイル一覧から「キーカスタマイズ」ボタンを押します。

「ATOKキーカスタマイズ」画面が表示されました。

「機能を検索」ボタンを押します。

「検索」画面が表示されました。

機能一覧から「日本語入力ON」を選択して、「OK」ボタンを押します。

「ATOKキーカスタマイズ」画面に戻りました。
「設定一覧」では、「日本語入力ON」が選択されています。

「変更」ボタンを押します。

「キーの変更」画面が表示されました。

「メニュー」から「キーボードから変更」を選択します。

「キーボード入力から変更」画面が表示されました。

キーボードの「変換」キーを押します。

「キーの変更」画面に戻ります。

「OK」ボタンを押します。

確認画面が表示されたら、「はい」を選択します。

「ATOKキーカスタマイズ」画面に戻ります。

「日本語入力ON」に「変換」キーが割り当てられました。

同様にして、「日本語入力OFF」に「無変換キー」を割り当てます。

以上で設定完了です。

快適な日本語入力を。