Ошибка компилятора при использовании переменной в качестве функции

#typescript

#typescript

Вопрос:

Я пытаюсь скомпилировать некоторый Typescript и получаю ошибку компилятора:

 TypeError: myVariable is not a function
    at Object.<anonymous> (/home/anon/Desktop/Typescript/main.js:37:1)
    at Module._compile (internal/modules/cjs/loader.js:738:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:749:10)
    at Module.load (internal/modules/cjs/loader.js:630:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:570:12)
    at Function.Module._load (internal/modules/cjs/loader.js:562:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:801:12)
    at internal/main/run_main_module.js:21:11
  

Я уверен, что это потому, что myVariable действительно не является функцией, но имеет тип ‘any’. Однако этот тип данных должен быть доступен как функция, если я не ошибаюсь.

Спасибо

 let myVariable: any = 10;

console.log(myVariable.name);
console.log();
myVariable();
  

Комментарии:

1. Вы имеете в виду, что тип данных JavaScript Number должен быть доступен как функция?

2. Я следую этому руководству:

3. Ну, any на самом деле просто сообщает компилятору TypeScript, что переменная может быть любого типа, и то, что вы на самом деле присваиваете переменной, — это число. Итак, фактически, вы пытаетесь запустить что-то вроде 10() , что, конечно же, завершается неудачей. Что именно вы пытаетесь сделать, «вызывая» число?

4. Спасибо за ваш ответ. Я следую этому руководству: youtube.com/watch?v=WBPrJSw7yQA примерно в 24:00 минут преподаватель демонстрирует вывод переменной myVariable на консоль. Он говорит, что, поскольку переменная имеет тип ‘any’, переменная ‘myVariable’ должна быть доступна следующими методами; console.log(myVariable.name ); myVariable(); myVariable.toUpperCase();

5. А, понятно. Когда диктор говорит, что TypeScript не выдает никаких ошибок (в 23:30), он не говорит об ошибках компиляции (из-за запуска tsc программы). Он ссылается на линтер TypeScript, который проверяет ваш код на наличие проблем в вашем текстовом редакторе перед компиляцией. Вы заметите, что под myVariable() строкой нет красных «закорючек». Однако, когда он переключает тип на unknown , появляются закорючки. Эти закорючки и есть ошибки, о которых он говорит — код никогда не предназначен для запуска.

Ответ №1:

Когда диктор говорит, что TypeScript не выдает никаких ошибок (в 23:30), он не говорит об ошибках компиляции (из-за запуска программы tsc). Он ссылается на линтер TypeScript, который проверяет ваш код на наличие проблем в вашем текстовом редакторе перед компиляцией. Вы заметите, что под строкой myVariable() нет красных «закорючек». Однако, когда он переключает тип на неизвестный, появляются закорючки. Эти закорючки и есть ошибки, о которых он говорит — код никогда не предназначен для запуска.