Почему typeof ведет себя таким образом при присвоении переменной const? - PullRequest
1 голос
/ 09 мая 2020

Учитывая следующий код:

const person = { name: 'Joe', age: 25 };
type personType = typeof person;   
const foo = typeof person;

Почему foo оценивается как

"string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"

Это похоже на псевдоним для any?

1 Ответ

4 голосов
/ 09 мая 2020

Это не так:

const person = { name: 'Joe', age: 25 };
const foo = typeof person;

console.log(foo); // Prints: "object"

То, что вы видите, вероятно, тип из foo, что в основном является всеми возможными возвращаемыми значениями typeof x в JavaScript .

Это потому, что type personType = typeof person; оценивается во время компиляции в TypeScript, но const foo = typeof person; оценивается во время выполнения в JavaScript (см. typeof документы в JavaScript). Это два разных typeof s!

И это не псевдоним для any, потому что тип, который вы видите, говорит, что это строка с одним из этих значений!

"string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function" - это тип выражения typeof something JS.

(Однако это заставляет меня задаться вопросом, почему тип TS JS - typeof не определяется условно на основе на вводе. Я считаю, что это должно быть возможно сделать в TypeScript, поэтому я не уверен, почему это еще не сделано.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...