Question: I learned that `new()` is how we structurally type a class constructor in TypeScript, so how can we type an object that has `new` method, like:

```
const k = {
  new() {
    return '123'
  }
}

```

Answer: 
There is no corresponding object literal syntax to define an object literal with `new`. You can use a class expression:

```
const k = class {
  constructor () {

  }
}

new k()

```

[play](https://www.typescriptlang.org/play/#code/MYewdgzgLgBA1jAvDYAbAhhCMDeBYAKBhXGgCcBXYKEMmACgEpdDjjWYBfQ7gwsAKYB3eEyA)
The keyword `new` is used to **instantiate** a class. 

```js
const k = new MyClass();

```

To define the constructor of this class you have to use the `constructor` keyword.

```js

class MyClass1 {
  constructor() {
  }
}

const MyClass2 = class {
  constructor() {
  }
}

interface MyClass3 {
    constructor(): Function;  // should be Function *if* we want it generic
}

```

`MyClass1` and `MyClass2` are quite equivalent. 

Be careful to `MyClass3`, you can't do something like `const k = new MyClass3()`. But you can do `const k: MyClass3 = new MyClass1()`. `MyClass3` is an interface, so you can use it only for typing nothing more.

Note that in Typescript when you define a class, it's also creating an interface. It's why a class can `implements` another class.

More info with TS doc:
[Class](https://www.typescriptlang.org/docs/handbook/classes.html)
[Interface](https://www.typescriptlang.org/docs/handbook/interfaces.html)