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