TypeScript编译器(tsc)命令在使用tsconfig时无法工作。

29

我全局安装了typescript (npm install typescript -g)

然后创建了一个文件夹,运行了npm --init,接着运行npm intall typescript --save-dev来安装typescript@2.1.4

在这个文件夹里,我创建了'helloworld.ts'

var msg = 'Hello World';
console.log (msg);

使用文件选项运行了tsc命令-tsc helloworld.ts,并将其编译为helloworld.js

接下来,我想使用tsconfig.json文件,所以我运行tsc --init,但是这不起作用,会显示错误:Unknown option 'init'

好的,我尝试手动添加tsconfig.json文件并将其添加到根目录中,如下:

{
    "compilerOptions": {
        "target": "es5"
    },
    "files": [
        "helloworld.ts"
    ]
}

我在命令提示符上运行tsc,但它不起作用并输出了如何使用tsc的语法、示例和选项:Syntax: tsc [options] [file] ...

出了什么问题?

where tsc 输出如下:

C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.0\tsc.exe
C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.0\tsc.js
C:\Users\Kap\AppData\Roaming\npm\tsc
C:\Users\Kap\AppData\Roaming\npm\tsc.cmd
4个回答

43

这是问题:

C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.0\tsc.exe
C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.0\tsc.js

卸载-更新-删除-摆脱:Visual Studio 过期的扩展...

或者将其从路径中移除...

或者将文件夹改名以确认问题...然后彻底删除它 :)

检查一下如果你执行以下操作会发生什么:

md x
cd x
tsc --init
npm init -y
npm link typescript
echo console.log('it works') > index.ts
tsc -p .
node .

应该输出

it works

还有,如果你依赖的模块需要它,或者你需要在“你的”代码中使用编译器功能,或者需要使用与全局安装的不同版本,则需要在项目中本地安装 TypeScript。

初始化:

tsc --init

编译

一个基于tsconfig.json的“项目”:

tsc -p .

其中 . 表示这里

编译“其他”项目

tsc -p other/tsconfig.json

更多帮助


谢谢Dan,但是对我不起作用:tsc init会产生error TS5007: Cannot resolve referenced file: 'init',而tsc -p .则会给我报错error TS5023: Unknown option 'p'。我有一种感觉,可能是我使用的tsc版本过旧,与typescript@2.1.4不兼容,但是不确定如何解决它,尝试卸载/重新安装typescript,但到目前为止没有成功。 - bnsaa
抱歉,我的错,我不知道自己在想什么。正确的命令是“tsc --init”,我会修改回答。 - Dan
@bnsaa:我明白了,我在想...npm --init 不是一个标志;) - Dan
是的,那就是问题所在了。有趣的是,昨天我已经从PATH中删除了它,但它仍然无法工作。最后我关掉电脑去睡觉了,今天早上重新启动后,它就可以工作了。我猜可能需要重启一下电脑 : ) 无论如何,感谢Dan。 - bnsaa
2
对于那些可能遇到相同问题的人,这是我解决问题的方法 - 从“Windows - 添加/删除程序”中删除/卸载“Visual Studio的Typescript工具”。然后按照Dan上面提到的方法从PATH环境变量中删除,卸载typescript npm uninstall typescript -g,重新启动系统并重新安装typescript npm install typescript -g。之后tsc就可以正常工作了。 - bnsaa
和原来的问题一样。我从Path中移除了环境变量:Microsoft SDKs/Typescript/1.0 - 经过10次尝试后终于记起我需要关闭/重新打开我的Powershell/命令提示符窗口!!但之后它正常工作了。谢谢你的答案! - Drenai

21

我遇到的问题是,我没有收到任何错误提示,但也没有得到任何输出。

后来我发现我的tsconfig.json文件里有"noEmit": true

当我去掉它后,问题得到了解决 :)


1
救了我的一天,我的意思是我的晚上(晚餐)。 - Loi Nguyen Huynh

3
我在Windows系统上调整tsc命令的Typescript版本所做的是:

Editing system environment PATH variable

将Typescript 1.0路径删除。 (开始按钮->键入:环境变量,单击选项(此处为Windows的英文版),选择系统环境变量PATH)。
然后我输入:
npm link typescript
然后我使用了Chocolatey的refreshenv命令来刷新我调整的系统PATH环境变量。
refreshenv
然后运行以下命令: tsc -v 我得到了: 版本2.2.1
当前版本的Typescript是3.5+,但是我全局安装了Typescript 2.2.1,因为我正在跟随使用该版本的Typescript课程。

因为对话框将PATH变量的值截断为2047个字符,所以我不得不直接从Regedit中删除你提到的环境变量。 - Hagen

3
每次我在谷歌上搜索“typescript tsc no output”时,都会发现自己遇到了同样的问题。这种情况肯定不止一次,所以我也想分享我的答案。
每次出现这种情况时,都是因为 TypeScript 配置了 “composite: true”,并且我删除了输出目录(在 “tsconfig” 中设置为 “outDir”),但没有删除 “tsconfig.tsbuildinfo” 文件。
这会导致 TypeScript 认为不需要更新输出,因为 “tsbuildinfo” 文件的时间戳表明最后一次构建是在所有文件修改之后进行的。

天啊,这太难懂了。它应该在 TypeScript 的仓库中发布一个问题。 - Philippe Fanaro
1
这里是相关的编程内容:https://github.com/microsoft/TypeScript/issues/50646 - Philippe Fanaro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接