🕌

TypeScript の string と String の使い方

2020/10/10に公開
2

概要

TypeScript を書いていると、引数や戻り値に string 型をよく使いますが String 型もあります.
この二つがどのような違いがあるのかちゃんと理解していなかったので、簡単にまとめてみました.

違い

string はプリミティブ型、String はオブジェクト型という違いがあります.

// string 型の変数を定義
const str1 = "string";
const str2 = String("string")

// String 型の変数を定義
const Str1: String =  "String"
const Str2 = new String("String")

console.log(typeof str1) // string
console.log(typeof Str1) // object

この二つの型の使い分けですが、公式のドキュメントにあるように 基本的に string を使っておけば良さそうです.
詳しい理由は書かれていないですが、String の方がインスタンスを作るのでコストが高いとかだと思います.

参考資料

Discussion

白山風露白山風露

インスタンス作成のコストは気にする必要はないです。どうせプリミティブ型のメソッドを呼び出す時はプリミティブラッパーオブジェクトが作られます。例えば、

"abcde".slice(1, 3);

というコードは

String.prototype.slice.call(new String("abcde"), 1, 3);

のように振る舞います。

それよりも、プリミティブラッパーオブジェクトはオブジェクトなので、一部の演算子などで挙動が異なるのが問題になり得ます。例えば、

"aaa" === "aaa"

は当然trueになりますが、

new String("aaa") === new String("aaa")

falseになります。

konu96konu96

なるほど. コメントありがとうございます.

記事のコメント部分は訂正線をしておきます.