当前位置: 首页 > 知识库问答 >
问题:

类型脚本:类型“字符串|未定义”不可分配给类型“字符串”

杨选
2023-03-14

当我将接口的任何属性设置为可选时,我会在将其成员分配给其他变量时遇到如下错误:

    TS2322: Type 'string | undefined' is not assignable to type 'string'.
    Type 'undefined' is not assignable to type 'string'.
    interface Person {
      name?: string,
      age?: string,
      gender?: string,
      occupation?: string,
    }
    
    function getPerson() {
      let person = <Person>{name:"John"};
      return person;
    }

    let person: Person = getPerson();
    let name1: string = person.name; // <<< Error here 

我如何绕过这个错误?

共有3个答案

通俊发
2023-03-14

我知道这有点晚了,但除了yannick的答案之外,还有另一种方法可以使用是将其转换为字符串,从而告诉TypeScript:我确信这是一个字符串,从而转换它。

let name1:string = person.name;//<<<Error here 

let name1:string = person.name as string;

这将使错误消失,但如果这不是字符串,您将得到一个运行时错误。。。这也是我们使用TypeScript确保类型匹配并在编译时避免此类错误的原因之一。

皇甫礼骞
2023-03-14

为了避免编译错误,我使用了

let name1:string = person.name || '';

然后验证空字符串。

万高洁
2023-03-14

您现在可以使用非空断言运算符,该运算符正好适用于您的用例。

它告诉TypeScript,即使某些内容看起来可能是空的,但它可以相信您它不是空的:

let name1:string = person.name!; 
//                            ^ note the exclamation mark here  
 类似资料:
  • 在我的班级中,我有一个属性: 并希望将其设置为: 设置此设置时,我会得到错误

  • 问题内容: 在上面的代码示例中,我尝试通过使用参数表单击按钮来调用方法( fetchData )。 错误是 类型’void’不能分配给类型’((event:MouseEvent)= > void)| 未定义”。 问题答案: 在您的代码中,您正在 调用 该函数。函数返回。不能期望哪个功能。 创建一个调用fetchData的新函数,例如。 更多 这是TypeScript防止的非常常见的错误

  • 这章我们来着重介绍一下字符串。 刚刚学习Rust的同学可能会被Rust的字符串搞混掉,比如str,String, OsStr, CStr,CString等等…… 事实上,如果你不做FFI的话,常用的字符串类型就只有前两种。我们就来着重研究一下Rust的前两种字符串。 你要明白的是,Rust中的字符串实际上是被编码成UTF-8的一个字节数组。这么说比较拗口,简单来说,Rust字符串内部存储的是一个u

  • 主要内容:CHAR 和 VARCHAR 类型,TEXT 类型,ENUM 类型,SET 类型字符串类型用来存储字符串数据,还可以存储图片和声音的二进制数据。字符串可以区分或者不区分大小写的串比较,还可以进行正则表达式的匹配查找。 MySQL 中的字符串类型有 CHAR、 VARCHAR、 TINYTEXT、 TEXT、 MEDIUMTEXT、 LONGTEXT、 ENUM、 SET 等。 下表中列出了 MySQL 中的字符串数据类型,括号中的 表示可以为其指定长度。 类型名称 说明 存储

  • redis 字符串类型

  • 元组(Tuple) 在别的语言里,你可能听过元组这个词,它表示一个大小、类型固定的有序数据组。在 Rust 中,情况并没有什么本质上的不同。不过 Rust 为我们提供了一系列简单便利的语法来让我们能更好的使用他。 let y = (2, "hello world"); let x: (i32, &str) = (3, "world hello"); // 然后呢,你能用很简单的方式去访问他们: /