在TypeScript中,是否有一种类型的truthy?
我有这个方法:Object.keys(lck.lockholders).length; enqueue(k:any,obj?:any):void想想TS有一种方法来检查空字符串'',顺便说一下.我想将其转换为:
enqueue(k: Truthy, obj?: any): void
Run Code Online (Sandbox Code Playgroud)
除了我不知道如何定义Truthy的类型.我认为TS有一种方法可以检查空字符串''.
我想这样做的原因是因为我不希望用户通过在null,undefined,'',等为重点,以哈希.
我正在构建一个discord.jsDiscord 机器人。现在由于某种原因,discord.js不适用于ESM模块(一个完全独立的问题),所以我的机器人应用程序使用CommonJS模块。现在我的系统上有另一个名为 的项目Lib,它有很多实用函数,我计划在几个不同的项目中使用这些函数,因此我不必重写它们。该Lib项目使用ESM模块。因为我不得不进口Lib来自DiscordBot,我用打字稿动态导入语法。现在,每当我转译我的DiscordBot项目时,动态导入都会被转换成一些丑陋的 javascript 模块代码,而那些丑陋的模块代码最终会使用 require()。由于 require() 无法导入 ESM 模块,我的机器人最终崩溃了。
然而,我试图停止我的 ts 编译器,从我导入的 ts 文件中复制代码,Lib然后将该代码手动粘贴到相应的 JS 文件中(并删除 TS 独有的功能,如类型注释和接口)。然后我运行了我的机器人应用程序,它运行得非常好。但我不想每次都这样做。所以这tsc是编译的问题。我该如何解决?
我喜欢在生成的javascript文件中保留我的注释,默认情况下编译器会删除它们.那有一个tsc参数吗?(用例是保持///参考路径= ...用于chutzpah单元测试.)
我想知道在编译时是否有办法忽略某些TypeScript错误?
我基本上遇到了大多数有大型项目的人都使用this关键字的相同问题,我不想把所有的类方法都放到构造函数中.
所以我有一个这样的例子:
这似乎创建了完全有效的JS,并允许我解决这个关键字问题,但正如您在示例中所见,typescript编译器告诉我,我无法编译该代码作为关键字,这在该范围内无效.但是,我不明白为什么它是一个错误,因为它产生好的代码.
那么有没有办法告诉它忽略某些错误?我肯定有时间会有一个很好的方法来管理这个关键字,但目前我发现它非常可怕.
==编辑==
(除非你关心这个问题的背景和部分咆哮,否则不要阅读)
只是为所有这些添加一些上下文来表明我不仅仅是一些坚果工作(我相信很多人仍然会认为我是)并且我有一些很好的理由为什么我希望能够允许这些要经历的错误.
下面是其中重点介绍一些主要问题(IMO)与打字稿我已经取得了一些以前的问题,目前的 这个实现.
https://typescript.codeplex.com/discussions/429350(以及我在底部做出的一些评论)
我遇到的根本问题是我需要保证所有逻辑都在一致的范围内,我需要能够访问knockout,jQuery等中的内容以及类的本地实例.我以前用var self = this;JavaScript中的类声明做了这个并且工作得很好.正如之前的一些问题中提到的,我现在不能这样做,所以我能保证范围的唯一方法是使用lambda方法,并且我可以将其中一个定义为类中的方法的唯一方法是在构造函数中,这一部分非常重视个人偏好,但我发现人们似乎认为使用该语法被归类为推荐模式并且不仅仅是一种解决方法,这一点非常可怕.
我知道TypeScript处于alpha阶段并且会发生很多变化,而且我希望我们能够更好地处理这个问题,但是目前我要么把所有东西弄得一团糟,只是为了让打字稿工作(这是在数百个文件中)我正在迁移到TypeScript)或者我只是在这种情况下调用我比编译器更好的调用(非常危险我知道)所以我可以保持我的代码很好并希望当一个更好的模式出来处理这个我然后可以迁移它.
另外,我知道很多人都喜欢TypeScript正在接受并试图保持尽可能接近新的JavaScript功能和已知语法的事实,这很好,但是typescript不是JavaScript的下一个版本所以我没有看到在语言中添加一些语法糖的问题,因为想要使用最新和最好的官方JavaScript实现的人仍然可以这样做.
我使用 Atom 编写代码。它用于tsconfig.json包含和排除文件夹。为了使用智能感知,我需要node_modules被包含在内,但是当我想编译它时,js我不想node_modules被编译。所以我需要调用tsc上层文件夹config.ts,这会导致编译整个node_modules.
我的文件夹结构如下所示:
node_modules
config.ts
spec
|--test1.ts
|--test2.ts
Run Code Online (Sandbox Code Playgroud)
知道如何node_modules在使用tsc命令编译时排除吗?
虽然我能找到的每个主题都想要修复或禁用 TS2339 错误,但我正在尝试使 eslint 规则与 typescript 规则同步,并且我想启用它。
在查看typescript-eslint项目时,我似乎找不到如何启用 TS2339 规则或找到关联的名称。
你可以看到我正在尝试做的设置:Typescript PlayGround
type Person = {
name: string;
}
const me: Person = {
name: 'Kenny'
}
// this should error both in the IDE (which it does) and with eslint command line with the @typescript-eslint configuration (which it does NOT)
me.age = 3
Run Code Online (Sandbox Code Playgroud)
遵循此处的设置和配置:规则设置
type Person = {
name: string;
}
const me: Person = {
name: 'Kenny'
}
// this should error both in …Run Code Online (Sandbox Code Playgroud) 从我想要做的节点应用程序中:
var typeScript = require('typescript');
typeScript.compile('...')
Run Code Online (Sandbox Code Playgroud)
我正在寻求将编译器实现到构建系统但无法访问公共API(typescript.compile等),这是不可能的.
这是我想要做的更完整的示例,不过下面是针对LiveScript而不是TypeScript,在为Brunch.io构建系统编写的插件中使用的:
LiveScript = require 'LiveScript'
sysPath = require 'path'
module.exports = class LiveScriptCompiler
brunchPlugin: yes
type: 'javascript'
extension: 'ls'
constructor: (@config) ->
null
compile: (data, path, callback) ->
try
result = LiveScript.compile data, bare: yes
catch err
error = err
finally
callback error, result
include: [
(sysPath.join __dirname, '..', 'vendor', 'prelude-browser-0.6.0.js')
]
Run Code Online (Sandbox Code Playgroud)
好奇,如果有人找到了解决方法吗?
更新
我最终实现了我自己的解决方案,解决了上面和其他地方列出的各种问题.有关更多信息和用法,请参阅https://github.com/damassi/TypeScript-Watcher.
我在vscode(0.9)中使用gulp任务来尝试从typescript和tslint中获取错误.
gulp任务正在监视我的ts文件的更改,并在更改时运行gulp-tslint和gulp-typescript.我还在vscode tasks.json和问题匹配器中定义了一个任务来解析结果.
解析错误并将其正确报告给vscode.但是,即使修复和保存代码,有时也会保留它们.
是否有一些额外的配置提供给vscode问题匹配器,以便它正确清除错误或它是一个vscode错误?作为一种解决方法,有一种方法可以手动清除所有错误吗?我发现清除它们的唯一方法是重启vscode并不是很好.
请注意,如果任务不是监视任务而是简单执行,则此方法可以正常工作.
我的vscode tasks.json
{
"version": "0.1.0",
"command": "gulp",
"isShellCommand": true,
"tasks": [
{
"taskName": "watch",
// Make this the default build command.
"isBuildCommand": true,
// Watching
"isWatching": true,
// Show the output window only if unrecognized errors occur.
"showOutput": "always",
// Use the standard less compilation problem matcher.
"problemMatcher": [
{
"owner": "gulp-tslint",
"fileLocation": [
"relative",
"${workspaceRoot}/app"
],
"pattern": {
"regexp": ".*\\[gulp-tslint\\] (error|warning) (.*)\\[(\\d*), (\\d*)\\]: (.*)",
"severity": 1,
"file": 2,
"line": 3,
"column": 4,
"message": …Run Code Online (Sandbox Code Playgroud) 我有这个:
$ tsc -m amd --outFile dist/out.js lib/index.ts
Run Code Online (Sandbox Code Playgroud)
lib/index.ts(87,48):错误TS1005:';' 预期.
是否有一个命令行选项我可以用来忽略错误?
所以我有标准的文件夹结构
dist/
src/
Run Code Online (Sandbox Code Playgroud)
src我的.ts文件在哪里,dist我的.js文件.(我"outDir":"dist"在我的tsconfig.json文件中,并"includes"设置为'src').
请注意 'dist'在我的gitignore文件中,因此它不在版本控制中,因此当它转到Travis时CircleCI,在dist我运行之前,文件夹中没有任何内容tsc.
这是问题 - 如果我npm install先运行- 它会失败,因为我在package.json中有这个:
"bin":{
"foo" :"dist/cli.js" // dist/cli.js does not exist yet
}
Run Code Online (Sandbox Code Playgroud)
但如果我tsc先运行- 那么tsc将会缺少编译所需的依赖项,如果我运行则会到达npm install.
该只有我能想到的解决这件事情,是安装所有必要的tsc第一个相关性,然后运行TSC,然后运行npm install --production.
然而,这不是最方便的事情.
有没有人遇到这个问题并找到了一个很好的解决方案?
tsc ×10
typescript ×9
javascript ×3
node.js ×3
eslint ×1
gulp ×1
npm ×1
npm-install ×1
this ×1
tslint ×1