Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript typescript-字符串文字类型到类型字符串_Javascript_String_Typescript_Typeliteral - Fatal编程技术网

Javascript typescript-字符串文字类型到类型字符串

Javascript typescript-字符串文字类型到类型字符串,javascript,string,typescript,typeliteral,Javascript,String,Typescript,Typeliteral,我有一个字符串文本类型的方法 type Status = 'new' | 'update' | 'close'; itemRequest(status: Status) { itemService.subscribeToChanges(status) //third party library method } 我遇到的困难是这个第三方方法接受的字符串不是我的自定义字符串类型Status subscribeToChanges(status: string) 当我传递给第三方方法

我有一个字符串文本类型的方法

type Status = 'new' | 'update' | 'close';

itemRequest(status: Status) { 
    itemService.subscribeToChanges(status) //third party library method
}
我遇到的困难是这个第三方方法接受的字符串不是我的自定义字符串类型
Status

subscribeToChanges(status: string) 

当我传递给第三方方法时,如何使我的字符串文本实际上是字符串的类型。它知道它实际上是一个字符串吗

您可以将状态设置为枚举吗?然后您可以使用
Status[Status]
,这将是您期望的字符串值。 i、 e


它应该会起作用。在JavaScript中,它是一个普通字符串。查看此示例或访问它


您可以将
状态的值转换为如下字符串:

type Status = 'new' | 'update' | 'close';

itemRequest(status: Status) { 
    itemService.subscribeToChanges(status as string)
}
不要使用
字符串(状态)
。这将从
status
构造一个新的
string
对象,这是一种浪费性的分配。强制转换将在运行时被删除,并且只更正TypeScript对
状态
变量类型的了解。请记住,TypeScript所做的任何类型检查都是在编译时完成的,并且没有运行时开销,也不存在任何问题

此代码将编译为以下内容:

itemRequest(status) {
  itemService.subscribeToChanges(status)
}

然而,我对为什么会发生这种情况感到困惑。您的类型别名都是类型
字符串
,因此从
状态
字符串
的转换应该是向上转换(即,在任何合理的类型检查器下都是允许的)。另一种方式将是主要问题。事实上,您的原始代码本身就可以正常工作。

到底是什么问题?当传递
状态时,您遇到编译错误
?什么错误?我无法复制它。它应该转换为小写的
字符串
,而不是大写的
字符串
。看见
type Status = 'new' | 'update' | 'close';

itemRequest(status: Status) { 
    itemService.subscribeToChanges(status as string)
}
itemRequest(status) {
  itemService.subscribeToChanges(status)
}