我是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
被用作类型
有帮助吗?
答案 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
,并且有效。感谢大家的时间和建议。
现在没有收到错误。