繁体   English   中英

Typescript:类型参数'string | undefined' 不能分配给“string”类型的参数

[英]Typescript: Argument of type 'string | undefined' is not assignable to parameter of type 'string'

我有嵌套数组列表的列表,我正在尝试基于数组值的 fiter。 当我过滤得到错误时。 我正在将 typescript 与 eslint 一起使用。

Argument of type 'string | undefined' is not assignable to parameter of type 'string'

但是我检查了 null/undefined 值,但仍然出现错误。

interface User {
  id: string;
  username?: string;
}

function getList (user:User){
  if(user.username === undefined){
    return {};
  }
  let arrayData: string[][] = [];
  arrayData = [["abcd"],["efgh"],["xyz"],["abcd","xyz"]];
 //here i have differnt logic
  const filterData = arrayData.filter(list => list.includes(user.username));
  return filterData;
}

getList({id: "123", username: "xyz"});

当我使用non-null assertion operator时,错误已解决但出现 lint 问题。

const filterData = arrayData.filter(list => list.includes(user.username!));

谁能帮我解决这个问题。

您正在比较 User .username ,这是可选的,这意味着它的类型是string | undefined string | undefined到数组中的每个string项,

您可以将数组的类型更改为: arrayData: Array<Array<string|undefined>>或者您可以只使用as将其视为string ,而不是string|undefined :即: list.includes(user.username as string)

您可以像这样声明用户名:

username?: string | undefined;

当你想设置一个已经有类型的变量时 | 未定义,并且 setter 不接受任何类型 | 未定义,您可以在变量末尾使用:,例如:

对于像你这样的界面

interface User { id: int; username?: string }

有一个变量

let userVariable = 'Terminator3000'

你可以做

user: User = { id: 123, username: userVariable! }

运算符指示该值不是未定义的

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM