1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

unknown型、never型について整理する

Posted at

unknown型とnever型はたまによく見ますが、それぞれがどのようなものなのかを理解していなかったので、この記事で整理したいと思います!

unknown型

unknown型はなんでも入れることができる型です。なんでも入れられる、つまり何が入っているかわからないことから、unknown型という名前になっているということですね。

function test(val: unknown) {
	return val;
}

// 以下は全てOK!
test('test');
test(123);
test(true);
test({ rice: "お米"});

any型との違い

なんでも入れることができる、という点だとany型も同じのように思えますが、unknown型はany型と比べて安全です。

any型の値は、使う際に型のチェックが行われません。そのため、本当に持っているかわからないプロパティやメソッドにアクセスしようとしてもコンパイルエラーになりません。

function test(val: any) {
	// エラーにならない!
	const name = val.name;
	const age = val.age;
	const valLength = val.length; 
	return val;
}

test('test');
test(123);
test(true);
test({ rice: "お米"});

unknown型については「なんでも入れることができる型」として型のチェックが行われます。そのため、アクセスしようとしているプロパティやメソッドが本当に存在するのかについては慎重に判断してくれます。

function test(val: unknown) {
	// Property 'name' does not exist on type 'unknown'.
	const name = val.name;
	
	// Property 'age' does not exist on type 'unknown'.
	const age = val.age;
	
	// Property 'length' does not exist on type 'unknown'.
	const valLength = val.length; 
	
	return val;
}

test('test');
test(123);
test(true);
test({ rice: "お米"});

never型

never型は当てはまる値が存在しない型です。当てはまる値がないということは、never型が当てられている変数についてはどのような値も代入することができないということです。

また関数の引数をnever型にした場合、その関数は(anyなどを使わない限り)呼び出すことができなくなります。

function dontCall(val: never) {
	// ユニークな仕様として、never型の値はどんな型にも代入できる
	const srt: string = val;
	const num: number = val;
	const obj: object = val;
	return val;
}

// 全てコンパイルエラーになる
dontCall({ rice: "お米" }); // Argument of type '{ rice: string; }' is not assignable to parameter of type 'never'.
dontCall("ご飯"); // Argument of type 'string' is not assignable to parameter of type 'never'.

終わりに

内容に間違いや誤字脱字等ございましたら、ご指摘いただけるとありがたいです!
読んでいただきありがとうございました!

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?