In typescript, keyword 'type' is used to alias existing types or anonymous types. This is typescript feature, and it has nothing to do with JavaScript. While const/let are used to declare variable in JavaScript.
class Person {
constructor(public name: string) {}
}
type PersonAlias = Person; // Person is used as a type
const Person2 = Person; // Person is used as a value
type PersonAlias2 = Person2; // error, Person2 is a value, not a type
type PersonAlias3 = PersonAlias; // ok, PersonAlias is a type
Because you can not assign value to a type, typescript introduced a keyword 'typeof', which can convert a value into a type. But don't be confused with JavaScript keyword 'typeof', which convert a value into a string value, such as "function", "string", etc.
const p = new Person('john');
type PersonAlias4 = typeof p; // typescript type
const typeName = typeof p; // javascript vlaue: "object"
In the following code, the Person class can be used as a typescript type and a javascript vlaue. If it is used as value, it is a bit confusing.
type PersonClass = typeof Person; // Person is used as javascript vlaue
type PersonAliase4 = Person; // Person is used as a typescript type
let personInstance: PersonAliase4 = new Person('john'); // ok
let personClass: PersonClass = personInstance; // error; type of "Person"
// is not the type of "typeof Person" :)
personClass = class { constructor(public name: string) { } }; //ok
You can test the code here