Angular Alertify服务报错:Type 'undefined'无法用作索引类型
解决Type 'undefined' cannot be used as an index type错误
问题根源在于你给message方法的options参数用了Partial<AlertifyOptions>类型。Partial会把类的所有属性变成可选的,这意味着options.messageType可能是undefined,而TypeScript不允许用undefined作为索引去访问alertify的方法,所以才会报错。
下面是几种可行的解决办法:
方法一:合并默认选项(推荐)
创建一个默认的AlertifyOptions实例,和传入的options合并,确保所有属性都有有效值:
message(message: string, options: Partial<AlertifyOptions> = {}) { // 合并默认配置与传入的选项,覆盖同名属性 const mergedOptions = { ...new AlertifyOptions(), ...options }; alertify.set('notifier', 'position', mergedOptions.position); alertify.set('notifier', 'delay', mergedOptions.delay); alertify[mergedOptions.messageType](message); }
方法二:给属性单独设置默认值
如果不想合并所有选项,可以单独给每个可能为undefined的属性加默认值:
message(message: string, options: Partial<AlertifyOptions> = {}) { const messageType = options.messageType ?? AlertifyMessageType.Success; const position = options.position ?? AlertifyPositions.BottomRightCenter; const delay = options.delay ?? 3; alertify.set('notifier', 'position', position); alertify.set('notifier', 'delay', delay); alertify[messageType](message); }
方法三:非空断言(不推荐)
如果你能保证调用message方法时一定会传入messageType,可以用非空断言符!告诉TypeScript这个属性不会是undefined,但这种方式不安全,一旦调用时没传,运行时会报错:
alertify[options.messageType!](message);
内容的提问来源于stack exchange,提问作者Guzel İşler
相关产品推荐
相关产品推荐

