TypeScript 允许自定义悬停工具提示中的类型显示格式,

mzsu5hc0  于 5个月前  发布在  TypeScript
关注(0)|答案(4)|浏览(64)

🔍 搜索词

  • customization type display
  • Array or T[]

✅ 可实现性检查清单

⭐ 建议

在TypeScript中,当悬停在一个变量上时,推断出的类型会以特定的格式显示。
例如,数字数组显示为number[]。
然而,一些开发者,包括我自己,更喜欢可读性和与其他通用类型的一致性的其他格式 Array<number>

📃 激励示例

我注意到抽象语法树(AST)中有一个 WriteArrayAsGenericType 标志,可以将 T[] 转换为 Array<T>
我想请求在tsconfig.json中添加一个配置选项以启用此标志,允许开发人员选择他们喜欢的数组类型悬停工具提示的格式。
例如:

{
  "compilerOptions": {
    "typeDisplayFormat": "generic" // Options could be "generic" for Array<number> or "shorthand" for number[]
  }
}

💻 用例

复杂类型可读性:我经常编写可以导致复杂类型的函数式代码,如 Task<Maybe<Task<Maybe<T[]>>[]>>[] 。简写 [] 符号可能会使理解嵌套的泛型关系变得困难。将这些类型显示为 Array<T> 将显著提高可读性和理解力。
一致性:大多数其他泛型类型使用尖括号(例如,Promise<T>,Map<K, V>),只有数组类型使用特殊的简写(number[])。将数组类型与此约定对齐将确保所有类型的一致性并提高清晰度。

dluptydi

dluptydi2#

我找到了一个临时的解决方法,帮助我解决了这个问题。
我修改了这个文件:C:\Users\<your_username>\AppData\Local\Programs\Microsoft VS Code\resources\app\extensions\node_modules\typescript\lib\typescript.js,并搜索了WriteArrayAsGenericType。这里是我找到的部分:

if (context.flags & 2 /* WriteArrayAsGenericType */) {
              const typeArgumentNode = typeToTypeNodeHelper(typeArguments[0], context);
              return factory.createTypeReferenceNode(type2.target === globalArrayType ? "Array" : "ReadonlyArray", [typeArgumentNode]);
            }

我将条件context.flags & 2更改为true。重启VSCode后,它对我有效。
我相信这将在VSCode更新后停止工作,所以这只是个临时解决方案。

v8wbuo2f

v8wbuo2f3#

@lsby,我们能合作找到一个永久的解决方案吗?

3df52oht

3df52oht4#

我相信永久解决方案是TypeScript团队添加我们需要的配置选项,但到目前为止还没有回应。也许我们可以考虑使用一个VSCode插件来解决这个问题。你有什么其他想法吗?

相关问题