是否有一个表达式的计算结果为TypeScript认为某个值所在的类型?
我一直在尝试搜索,但所有的答案都是关于Javascript的运行时类型,而不是TypeScript的类型。
例如
const a = 5 as unknown as string;
console.log(typeof a);
// number
上面的代码打印“number”是因为它在运行时从JavaScript获取类型。但是,Typescript假设a是一个String。下面的类型检查是因为TypeScript认为a是一个String:
function naiveType(v: string): string {
return "string";
}
const a = 5 as unknown as string;
console.log(naiveType(a));
1条答案
按热度按时间jdgnovmf1#
不管怎样,这在TypeScript编译器中是不可能的。
TypeScript的设计非目标之一是:
1.在程序中添加或依赖运行时类型信息,或者根据类型系统的结果发出不同的代码。相反,鼓励使用不需要运行时元数据的编程模式。
如果有一个
tsTypeof
运算符按您所需的方式工作,则TypeScript代码我需要编译成类似下面的JavaScript
而TypeScript代码
需要编译成类似于
这意味着
tsTypeof a
将根据类型系统的结果编译成不同的东西,这违反了规则。如果有人要为这样的操作员打开一个特性请求,几乎肯定会被拒绝,因为人们不能真实地选中the TypseScript feature request issue template中的复选框
这可以在不根据表达式类型发出不同JS的情况下实现。
如果你想要这样的东西,你需要添加一个构建步骤,比如说,使用the TypeScript compiler API来处理你的TypeScript代码,并将其转换成一种保留编译时类型信息的形式。当然,现有的框架可以为你做这件事,比如Deepkit的
typeOf()
函数。但这让我们走出了纯粹的TypeScript领域,进入了外部工具。这不是这个问题的重点。