typescript - 确定类型是 'string' 文字、 'number' 文字还是 'string | number' 文字

标签 typescript

由于 typescript 现在支持条件类型,我决定进行一些元编程,为 VSCODE intellisense 添加更多 flavor 。但是,虽然使用 A extends B 可以轻松分离其他类型,但我很难确定提供的类型是否为文字。

所以问题是 - 如何确定给定类型是否为文字类型?

最佳答案

我不确定您的用例是什么。就个人而言,我会做这样的事情:

type IfStringOrNumberLiteral<T, Y=true, N=false> =
  string extends T ? N : // must be narrower than string
  number extends T ? N : // must be narrower than number
  [T] extends [never] ? N : // must be wider than never
  [T] extends [string | number] ? Y : // must be narrower than string | number
  N

我总是使用 --strictNullChecks因此,当涉及到如何处理 nullundefined 时,您的情况可能会有所不同。当然,可以对其进行修改以满足您的任何特定需求。大多数情况下,我只是想展示 ( X extends Y ? true : false ) extends true 形式的迂回构造的替代方案。你:V

希望对您有所帮助;祝你好运。

关于typescript - 确定类型是 'string' 文字、 'number' 文字还是 'string | number' 文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52806230/

相关文章:

typescript 检查接口(interface)的泛型类型

javascript - 无法使用 Typescript 从表中删除一行

javascript - TypeScript 和 Angular 服务

javascript - Angular 2 : Change detection inside observable

javascript - 从 javascript 包的子文件夹导入

typescript - TypeScript 中的类型化方法

javascript - 带有 babel es2015 预设的 webpack 会修复 IE 11 上的关闭问题吗?

javascript - 在 angularMaterialTable 中使用 *ngIf

reactjs - 如何更改 NextJS 13 中服务器操作的状态?

node.js - 无法在 Mac 上安装 Typescript