Typescript -字符串文字类型到字符串类型
typescript - string literal type to type string
我有一个string literal type guard
方法type Status = 'new' | 'update' | 'close';
itemRequest(status: Status) {
itemService.subscribeToChanges(status) //third party library method
}
我遇到的困难是这个第三方方法接受字符串而不是我自定义的字符串类型Status
subscribeToChanges(status: string)
我如何使我的字符串字面量实际上是字符串的类型,当我传递给第三方方法。它能理解它实际上是一个字符串吗?
您可以将Status
的值转换为如下字符串:
type Status = 'new' | 'update' | 'close';
itemRequest(status: Status) {
itemService.subscribeToChanges(status as string)
}
Do not use String(status)
。这将从status
构造一个新的string
对象,这是一种浪费的分配。该强制转换将在运行时被擦除,并且只是纠正TypeScript对status
变量类型的了解。请记住,TypeScript所做的任何类型检查都是在编译时完成的,没有运行时成本,也不存在。
这段代码将被编译成如下内容:
itemRequest(status) {
itemService.subscribeToChanges(status)
}
然而,我对为什么会发生这种情况感到困惑。您的类型别名都是string
类型,因此从Status
转换到string
应该是向上转换(即,在任何合理的类型检查器下都是允许的)。相反的情况才是主要问题。实际上,您的原始代码本身工作得很好。
可以将Status设置为enum吗?然后您可以使用Status[status]
,这将是您期望的字符串值。例如
enum Status { new, update, close }
itemRequest(status: Status) {
itemService.subscribeToChanges(Status[status]) //third party library method
}
应该可以。在JavaScript中,它是一个普通字符串。看看这个例子,或者在操场上参观。
// TypeScript
type Status = 'new' | 'update' | 'close';
function itemRequest(status: Status) {
itemService.subscribeToChanges(status) //third party library method
}
let myStatus: Status = 'update';
itemRequest(myStatus);
// Compiled JavaScript
function itemRequest(status) {
itemService.subscribeToChanges(status); //third party library method
}
var myStatus = 'update';
itemRequest(myStatus);
相关文章:
- 可变大小的JavaScript字符串如何成为基元类型
- 从查询字符串参数推断出正确的数据类型
- 将大数组(字符串和类型数组的混合物)存储到blob或文件中/从blob或文件检索大数组的最佳方式
- Javascript,var name=1,“;类型名称“;给出“;字符串”;
- 为什么Javascript程序员更喜欢在代码中重复字符串作为常量,而不是使用枚举类型的对象
- 字符串对象类型或基元类型也是如此
- 模版启动错误-类型错误(“参数”url'必须是字符串,而不是“+类型的url”)
- 使用jscodeshift添加表达式时,错误{..}与类型字符串不匹配
- 将字符串文件类型/权限转换为数字
- 我可以从类型编号中获取字符串值吗?
- 数组类型字符串导致类型错误的对象
- 为什么字符串类型返回功能
- 将字符串连接到输入类型为“”的字符串;文本“;领域JavaScript
- 未捕获错误:不变冲突:元素类型无效:应为字符串
- Realm React Native-需要迁移:目标类型'字符串'不会'不存在于属性'电
- 使用鸭子类型的对象键入字符串文字
- 未捕获的类型错误:字符串不是函数
- Google图表:轴#0的数据列不能为字符串类型
- 类型号不能分配给类型字符串
- 流类型-字符串与字符串枚举不兼容