常量值作为数组元素给出错误

时间:2018-11-20 14:13:05

标签: javascript reactjs typescript constants

我是Typescript的新手。 我有这些枚举和常量变量:

enum VALUE_MAP = { value1 = 'value1', value2 = 'value2', value3 = 'value3' }
const SOME_CONSTANT = [VALUE_MAP.value1, VALUE_MAP.value2];

还有一种使用SOME_CONSTANT来检查值是否存在的方法。

export const hasValue = (value: string) => SOME_CONSTANT.includes(value);

这给了我错误:

TS2345: Argument of type 'string' is not assignable to parameter of type 'VALUE_MAP'.

使用(value: VALUE_MAP) =>可以解决问题,但是我不想这样做,或者我想知道为什么VALUE_MAP被用作类型

有帮助吗?

3 个答案:

答案 0 :(得分:1)

您应该使用:

UIEventHandler.m

没有-(void) handleStartEditingForAttributeID:(NSString *)attributeID { // Possible solution //if (self.editedAttributeID != nil && [attributeID isEqualToString:self.editedAttributeID]==NO) { // Workaround needed for UISwitch events // [self handleEndEditingForActiveAttribute]; //} self.editedAttributeID = attributeID; self.temporaryValue = nil; } -(void) handleValueChangeForEditedAttribute:(NSString *)newValue { self.temporaryValue = newValue; } -(void) handleEndEditingForEditedAttribute { if (self.temporaryValue != nil) { // Only if value has changed NSLog(@"UIEventHandler:saveValue:%@:{%@}", self.editedAttributeID, self.temporaryValue); // Causes the view to regenerate // The UITextField loses first responder status and UIControlEventEditingDidEnd is gets triggered too late [self.storage saveValue:self.temporaryValue forAttribute:self.editedAttributeID]; self.temporaryValue = nil; } self.editedAttributeID = nil; } 表示参数。 如果您使用Babel插件,则会在编译过程中剥离参数类型。

输入:

export const hasValue = (value) => SOME_CONSTANT.includes(value);

输出:

string

因此,参数类型在ES6中无效。如果代码是使用Babel(带有剥离插件)进行转译的,则可以使用它们。

答案 1 :(得分:1)

如果要使用Array.includes,则需要定位ES2016或更高版本,因为ECMAScript 5中不存在它。

例如,此tsconfig.json失败,并显示您描述的错误:

{
    "compilerOptions": {
        "target": "ES5"
    }
}

而这个tsconfig.json不是:

{
    "compilerOptions": {
        "target": "es2016"
    }
}

答案 2 :(得分:0)

在@Daniel A. White之后,指出我应该使用enum。然后,我得到了一些提示,并更改了一些代码。 因此VALUE_MAP已经是enum。我将其更改为constant,并且有效。感谢大家的时间和建议。

现在没有收到错误。