问题标签 [tsc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
836 浏览

typescript - 打字稿编译器错误:无法将“{}[]”转换为“数组”

我在使用此打字稿代码时遇到编译器错误:)

我已经像这样定义了 playerBullets:

并尝试这样做:

但是这段代码在市场上出现了红色语法错误:

WebUI/ts/game.ts(89,19):预期的变量、类、接口或模块 WebUI/ts/game.ts(88,29):无法将 '{}[]' 转换为 'Array'

如果我将定义更改为:

它有效,有什么想法吗?

0 投票
1 回答
2484 浏览

javascript - TypeScript 编译错误“未知文件扩展名”

我收到多个 *.ts 文件的构建错误。TypeScript 编译器说

文件的未知扩展名:“<文件名和路径 >.ts”。仅允许 .ts 和 .d.ts 扩展名。

这些文件在保存时构建良好。Web Essentials 从不抱怨任何事情,这是我在输出窗口中收到的唯一消息。我正在使用 VS 2012

0 投票
1 回答
455 浏览

typescript - 将多个打字稿编译成一个闭包

当编译(--out)多个 *.ts 文件时,每个文件都包含一个具有相同模块标识符的类,会创建一个 *.js 文件,其中每个类都包装在自己的闭包中,并将模块的引用传递给每个闭包。

例子:

酒吧.ts:

脚:

out.js

有没有办法将两个类都包含在一个文件中,以便编译器创建一个闭包来声明两个类?将所有类放在一个 *.ts 文件中似乎是一个非常糟糕的主意。

目的是:

  1. 每个类使用一个 *.ts 文件
  2. 在模块的所有类中使用未导出的类
  3. 为模块提供一个干净的接口

我实际意思的类似 Dart 的伪代码:

baz.ts

巴茨

谢谢阅读,

马丁

0 投票
2 回答
4269 浏览

javascript - TypeScript:编译删除未引用的导入

在我们的项目中,我们使用 RequireJS 作为我们的模块加载器。我们的一些模块会影响全局库,因此不会直接在引用它们的模块中使用。

例子:

这在用 JavaScript 编写我的模块时按预期工作。但是,我们正在逐步将我们的项目转换为 TypeScript。鉴于上面的示例,这将导致:

并且在将其编译为 JavaScript 时,编译器希望提供帮助并删除任何未使用的 imports。因此,这会破坏我的代码,导致第二个导入的模块不可用。

我目前的工作是包含一个冗余分配,但这看起来很难看:

有谁知道是否可以将 TypeScript 编译器配置为在编译期间不优化模块?

0 投票
1 回答
520 浏览

typescript - 无效分配缺少 TSC 警告

我正在尝试为node-serialport库编写一个 TypeScript 类型定义文件。该库导出parsers具有两个函数的变量,raw并且readline. 后者不能直接用作解析器——它在调用时会产生一个解析器。这是我第一次尝试类型定义文件的片段:

我遇到的问题是,如果我分配parsers.readline给类型变量,tsc 不会发出警告ParserFunc。为了说明,请考虑以下 TypeScript 文件:

当我使用 tsc 编译/转译这个文件时,我得到:

但是没有警告分配给d!如果我通过删除所需的delimiter参数,我得到:readline?

所以现在它检测到分配d无效。但为什么不是以前呢?

这是我第一次接触 TypeScript,所以请温柔一点。谢谢!:-)

0 投票
3 回答
44849 浏览

typescript - 打字稿原始类型:“数字”和“数字”类型之间有什么区别(TSC 不区分大小写)?

我打算写一个 type 的参数number,但我拼错了类型,Number而是写了。

在我的 IDE(JetBrains WebStorm)上,该类型Number使用与原始类型相同的颜色编写number,而如果我编写一个类的名称(已知或未知),它使用不同的颜色,所以我猜它以某种方式识别拼写错误的类型是正确/几乎正确/排序正确的类型。

当我编译代码时,TSC 没有抱怨编译器找不到名为 的类,而是Number写了以下错误消息:

这是否意味着number两者Number并存为不同的类型?

如果这是真的,那么这些类之间的区别是什么?

如果不是这种情况,那么为什么它根本没有编写它为未知类显示的相同错误消息(“当前范围内不存在名称'Number'”)

这是代码:

0 投票
2 回答
3478 浏览

node.js - 包含 node.d.ts 时的 Typescript 编译器错误

我最近开始从 PHP 切换到 Node.js,因为我是 Typescript 的忠实粉丝,所以我使用的是 Typescript + Node.js。当我开始扩大规模并真正构建我的代码时,我的示例编译得很好。但后来我遇到了一个问题。每当在我的一个 .ts 文件中引用 node.d.ts(带有参考文档注释)时,Node.js 中的 Typescript 编译器都会抱怨重复定义。我的两个 .ts 文件抱怨没有 node.d.ts 定义,但我的 main.js 文件没有。(以下文件:)

search_request.ts

main.ts

如果我添加<reference path="node.d.ts" />到 search_request.ts 的顶部,它编译得很好。如果我删除它,我会收到有关缺少定义的警告。但是,如果我将它包含在任一文件中,编译 main.ts 会给我数百条关于重复标识符的警告。

我不是 Typescript 的新手,但我是 Node.js 的新手,并且是直接使用 tsc 编译器而不是通过 VS2012 的新手。我到底做错了什么?编译器是否像 lib.d.ts 一样隐式包含 node.d.ts?如果是这样,为什么我在编译 search_request.ts 时会出错?

0 投票
1 回答
803 浏览

node.js - 打字稿冲突的变量名称

我正在尝试编译一些 Node.js Typescript 代码,但我遇到了两个名为console. 本质上,Node.js 有一个console.trace()方法,而普通的浏览器端 Javascript 没有。我在我的 Typescript 文件中引用了 node.d.ts,其他一切都很好。node.d.ts 声明console为变量,但 lib.d.ts 也是如此,这似乎覆盖了 Node.js 版本。将 --nolib 添加到编译器只会引发数百个关于未定义符号的错误。有没有办法在不编辑 lib.d.ts 的情况下解决这个问题?(或铸造控制台:(<any>console).trace()?)

0 投票
3 回答
25982 浏览

this - 忽略某些 TypeScript 编译错误?

我想知道是否有办法在编译时忽略某些 TypeScript 错误?

我基本上遇到了大多数大型项目的人在使用this关键字时遇到的相同问题,我不想将所有类方法都放入构造函数中。

所以我有一个这样的例子:

打字稿示例

这似乎创建了完全有效的 JS 并允许我绕过this关键字问题,但是正如您在示例中看到的那样,打字稿编译器告诉我,我无法将该代码编译为关键字 this 在该范围内无效。但是我不明白为什么它是一个错误,因为它产生了好的代码。

那么有没有办法告诉它忽略某些错误?我相信只要有时间,就会有一种很好的方法来管理this关键字,但目前我觉得它非常可怕。

== 编辑 ==

(除非你关心这个问题的上下文和部分咆哮,否则不要阅读)

只是为这一切添加一些背景信息,以表明我不仅仅是一些疯狂的工作(我相信你们中的很多人仍然认为我是)并且我有一些很好的理由让我能够允许这些要经历的错误。

以下是我之前提出的一些问题,这些问题突出了 TypeScript当前 实现的一些主要问题(imo)。

使用带有 Typescript 的草坪椅

Typescript 中 this 的子范围问题

https://typescript.codeplex.com/discussions/429350(我在底部做了一些评论)

我遇到的根本问题是我需要保证所有逻辑都在一致的范围内,我需要能够访问淘汰赛、jQuery 等和类的本地实例中的东西。我曾经使用 JavaScript 中的类内声明来执行此操作,var self = this;并且效果很好。正如之前的一些问题中提到的,我现在不能这样做,所以我可以保证范围的唯一方法是使用 lambda 方法,而我可以将其中一个定义为类中的方法的唯一方法是在构造函数中,这部分很大程度上取决于个人喜好,但我发现人们似乎认为使用该语法被归类为推荐模式而不仅仅是一种解决方法,这很可怕。

我知道 TypeScript 处于 alpha 阶段,很多事情都会发生变化,我非常希望我们能找到更好的方法来处理这个问题,但目前我要么把一切都弄得一团糟,只是为了让 typescript 工作(这是在数百个文件中)我正在迁移到 TypeScript )或者我只是在这种情况下进行比编译器更了解的调用(我知道非常危险)所以我可以保持我的代码很好,并希望当出现更好的模式来处理这个问题时我然后可以迁移它。

顺便说一句,我知道很多人都喜欢 TypeScript 正在接受并尝试尽可能接近新的 JavaScript 功能和已知语法的事实,这很棒,但 typescript 不是 JavaScript 的下一个版本,所以我认为在语言中添加一些语法糖没有问题,因为想要使用最新最好的官方 JavaScript 实现的人仍然可以这样做。

0 投票
2 回答
1911 浏览

typescript - “tsc --out ... --declaration”不包括自定义接口

设置
假设我们有两个文件,A.ts 和 Bdts。现在在 A 里面我们有:

现在假设我想将我所有的打字稿文件组合成一个单一的定义文件。我知道如何做到这一点的唯一方法是创建一个 .js 文件,然后创建一个 .d.ts 文件。

因此我们这样做:

我们得到 foo.js 和 foo.d.ts。

现在唯一的问题是 foo.d.ts 只包含 A.ts 而不是 Bdts 的定义。因此,为了让我们生成的 foo.d.ts 真正工作并且不抛出错误,我们需要手动添加对 Bdts 的引用,或者我们需要将 Bdts 的全部内容复制并粘贴到 foo.d.ts 中。

这两种解决方案都相当难看。那么有没有办法通过 typescript 编译器创建一个单一的声明文件,该文件还包括用户创建的接口?我肯定错过了什么...