81
41

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

TypeScript 3.0のunknown型 - タイプセーフなany

Last updated at Posted at 2018-08-12

TypeScript3.0でunknown型が追加されました。
TypeScript 3.0 # New unknown top type · TypeScript

unknown型は、any型のタイプセーフ対応版のようです。unknown型には任意の値を代入できる点はany型と同一ですが、型アサーション等が無いと利用できません。

例として、String.indexOf()メソッドをstringでないインスタンスで実行してみます。

var one: any = 1;
var two: unknown = 2;

one.indexOf("1"); // 実行時エラー (>_<)
two.indexOf("2"); // コンパイルエラー \(^o^)/

if (typeof two === "string") {
  two.indexOf("2");  // これはOK \(^o^)/
}

unknown型ならば、未知のデータを代入できるというany型の恩恵を受けつつ、型の違いによる不具合をコンパイル時のエラー($ tscコマンド等)で事前に検知することができ、安全になります。

Webサービスやユーザ入力値等に対する利用が想定されていて、たとえばJSON.parse()の返り値に適用できる点が、TypeScript公式のissueでも言及されています。イメージとしてはこんな感じでしょうか。

const json: string = '{"1": "1", "2": "2"}'

const json_any: any         = JSON.parse(json);
const json_unknown: unknown = JSON.parse(json);

json_any["1"]     + json_any["2"]     // 3ではなく"12"になってしまう (>_<)
json_unknown["1"] + json_unknown["2"] // コンパイルエラー \(^o^)/

参考: DefinitelyTyped/types/parse-json/index.d.ts

環境

  • TypeScript 3.0.1
81
41
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
81
41

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?