Open3

TypeScriptのanyを理解する

nakaakistnakaakist

https://www.typescriptlang.org/docs/handbook/2/functions.html#unknown

似たような型に、unknownがある。

  • unknownは、「任意の値」を表す型だが、その値に対して、あらゆるプロパティアクセスや関数呼び出しが禁止されるので安全。
  • unknown型は、「なんか未知の型を引数として受け取る関数」の引数の型としてanyの代わりに用いたり、「返り値の型が任意になりうる関数」の返り値の型として用いたりできる(下記)
function safeParse(s: string): unknown {
  return JSON.parse(s);
}
 
// Need to be careful with 'obj'!
const obj = safeParse(someRandomString);
nakaakistnakaakist

やや奇妙に思える?振る舞いとして、anyとconditional typeの組み合わせがある。
下記の型は、「anyがあらゆる型を包含する」という視点では、trueに決まりそうだが、実際はbooleanとなる。

type T = any extends string ? true : false

これに関しては議論がされており、TypeScriptの仕様らしい。

https://github.com/microsoft/TypeScript/issues/40049

any is treated like a wildcard that matches both branches

と回答されており、anyはワイルドカード的な振る舞いをするため、どちらのbranchにも入ってしまうとのこと。