object, Object, interface, any, unknownの違い
オブジェクトを表現するいろいろな型を比較してみた。
参考: https://www.typescriptlang.org/docs/handbook/basic-types.html
object
プリミティブ型とnull, undefined以外のすべてを表す型
プロパティはない
Object
Objectクラス(コンストラクタ)またはそれを継承したクラスのインスタンスの型
Object.prototypeにあるプロパティが利用可能
interface
指定したプロパティを持っているオブジェクトを表す型
関数として呼び出し可能か、コンストラクタとして呼び出し可能かも指定できる
指定していないプロパティを持っているオブジェクトもその型に代入可能
こんなこともできる
code:ts
const a: {} = 1
any
あらゆる値を代入可能な型
any型の式に対してはあらゆる操作が許される
unknown
あらゆる値を代入可能な型
anyと違い、型ガードや型アサーションを経由しない限りあらゆる操作が型エラーになる