字符串类型或字符串数组类型上不存在属性'substr'。

3

我有一段JavaScript代码,现在想将其转换成TypeScript。

          var ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
          if (ip.substr(0, 7) == "::ffff:") {
            ip = ip.substr(7);

这是我的一段代码,以前在js中能够正常工作,但现在我在使用substr时出现了错误:

属性'substr'不存在于类型'string | string[]'上。属性'substr'不存在于类型'string[]'上。ts(2339)

我猜想我应该为变量ip添加类型,但我不知道应该分配什么类型。

任何帮助将不胜感激。


添加String类型 - undefined
关于使用 substr 的注意事项 以及为什么它可能应该避免使用,请注意。 - undefined
2个回答

2

该属性被定义为string | string[]是有原因的(这也是你首先使用TypeScript的原因)。可能一个头部键有多个值,所以仅仅“假设”它总是一个string错误的

最简单的解决方案--在尝试调用.substr之前进行类型检查,如下所示:

if (typeof ip === 'string' && ip.substr(0, 7) == "::ffff:") {
  // …

更好的做法是,还要处理它实际上是一个数组的情况。但逻辑取决于您的具体要求。

1
这就是我一直在寻找的答案,完全解决了我的问题。谢谢 @qqilihq - undefined

-2

在这里使用String而不是string引用这里

所以,你的代码将会是

          var ip: String = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
          if (ip.substr(0, 7) == "::ffff:") {
            ip = ip.substr(7);

我按照你说的做了, substr 的问题似乎已经解决了,但是现在我在 ip 上遇到了这个错误 类型“string | string[] | undefined”不能赋值给类型“String”。 类型“undefined”不能赋值给类型“String”。ts(2322) - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接