Какова цель "typeof" в членах в TypeScript типизации? - PullRequest
0 голосов
/ 16 июня 2019

Определения машинописи Electron содержат следующий интерфейс:

interface MainInterface extends CommonInterface {
  // I understand these
  app: App;
  autoUpdater: AutoUpdater;
  // But not these
  BrowserView: typeof BrowserView;
  BrowserWindow: typeof BrowserWindow;
  ClientRequest: typeof ClientRequest;
  ...
}

Что означает typeof XX в этом контексте? AFAIK typeof возвращает строковое имя типа, например, Вышеуказанное эквивалентно

BrowserView: "BrowserView";

Если это так, то какова цель определения членов, которые используют typeof?

Ответы [ 2 ]

1 голос
/ 28 июня 2019

В Typescript определение класса приводит к двум интерфейсам:

  1. Интерфейс класса
  2. Интерфейс экземпляра

Проблема в том, что толькоИнтерфейс экземпляра получает имя класса.Чтобы получить доступ к интерфейсу класса (для таких вещей, как new MyClass() или MyClass.staticProperty), вы должны использовать typeof.

1 голос
/ 16 июня 2019

Если в аннотации типа, как в примере выше, оператор typeof задает тип значения.Применительно к переменной она дает тип переменной.Применительно к классу он дает тип класса (не тип экземпляра, а тип, представляющий конструктор класса и статические методы.

class Foo {
  static method(){}
}

let foo: typeof Foo;
foo.method();
new foo()

let o = 1
let oo: typeof o
...