TypeScript API:提供一种确定脚本类型的方法,

hrirmatl  于 3个月前  发布在  TypeScript
关注(0)|答案(5)|浏览(166)

建议

🔍 搜索词

api scriptkind

✅ 可实现性检查清单

我的建议符合以下准则:

  • 这不会对现有的TypeScript/JavaScript代码造成破坏性的更改
  • 这不会改变现有JavaScript代码的运行时行为
  • 这可以在不根据表达式的类型发出不同的JS的情况下实现
  • 这不是一个运行时特性(例如库功能、JavaScript输出的非ECMAScript语法、JS的新语法糖等)
  • 这个特性将与TypeScript's Design Goals的其他部分保持一致。

⭐ 建议

目前,scriptKind属性被标记为@internal,如果能在公共API中暴露出来,那就太好了。
TypeScript/src/compiler/types.ts
第3802行到第3804行 a21024d
| | |
| | /* @internal */scriptKind: ScriptKind; |
| | |

📃 动机示例

我想知道一个SourceFile是否属于ScriptKind.JS,这样我就可以只修改.js文件。
我可以直接检查SourceFile.fileName是否以.js结尾。但我更希望利用TypeScript用于检查文件是否为JavaScript文件的相同逻辑。这样我可以确保我的应用程序和TypeScript对于什么是和不是JavaScript文件达成一致。

💻 用例

我已经编写了一个基本的转换器,它会对项目中的文件进行一些修改。现在我想给所有的JavaScript文件添加// @ts-nocheck

xdyibdwo

xdyibdwo1#

我刚刚意识到给SourceFiles添加注解并不容易。因此,我的用例在这里不再适用了。

r1wp621o

r1wp621o2#

我不认为暴露这个有问题,所以如果你或其他人最终需要这个,请再发一个ping,我们可以更详细地评估。

vsdwdz23

vsdwdz233#

我刚刚遇到了一个边缘情况,.mjs文件没有正确处理。因为我只是检查了if (filePath.endsWith(".js"))。所以在这里访问scriptKind属性可能会很有用。目前我正在对scriptKind属性进行类型转换:

const castAst = ast as typeof ast & {scriptKind: ts.ScriptKind};
if (castAst.scriptKind == ts.ScriptKind.JS) {
	// do something
}
h7appiyu

h7appiyu4#

有任何问题吗?

vyswwuz2

vyswwuz25#

我想不到其他的了。

相关问题