如何区分普通对象类型和类类型?
class Foo {
constructor(public a: number) {}
}
declare let obj: {a: number}
declare let inst: Foo
// Either one would be fine.
type IsPlainObject<T> = ???
type IsClassType<T> = ???
如果要在普通对象上使用“映射类型”,而在类类型上则不要使用。
编辑:在许多(大多数?全部?)情况下,类类型似乎与接口相同:
class Foo { a?: number }
class Bar { a?: number }
type A = Foo extends Bar ? 1 : 0 // => 1
type B = Bar extends Foo ? 1 : 0 // => 1
type Obj = { a?: number }
type C = Foo extends Obj ? 1 : 0 // => 1
type D = Obj extends Foo ? 1 : 0 // => 1