TypeScript also treats classes as their own type:
class Foo { foo: number; }
class Bar { bar: string; }
class Baz {
constructor(foo: Foo, bar: Bar) { }
}
let baz = new Baz(new Foo(), new Bar()); // valid
baz = new Baz(new Bar(), new Foo()); // tsc errors
Like function parameters, classes sometimes have optional members. The same ?: syntax can be used on a class definition:
class Person {
name: string;
nickName?: string;
}
In the above example, an instance of Person is guaranteed to have a name, and might optionally have a nickName