我有嵌套数组列表的列表,我正在尝试基于数组值的过滤器。当我过滤错误时。我正在使用带有 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!));
谁能帮我解决这个问题。
答案 0 :(得分:1)
您正在比较用户 .username
,这是可选的,这意味着它的类型为 string | undefined
到数组中的每个 string
项目,
您可以将数组的类型更改为:arrayData: Array<Array<string|undefined>>
或者您可以仅使用 as
将其视为 string
,而不是 string|undefined
:即:{{ 1}}
答案 1 :(得分:0)
您可以像这样声明用户名:
username?: string | undefined;
答案 2 :(得分:0)
当你想设置一个已经有类型的变量时|未定义,并且 setter 不接受任何类型 |未定义,您可以使用 !在变量的末尾 例如:
像你这样的界面
<块引用>interface User { id: int; username?: string }
有一个像
这样的变量 <块引用>let userVariable = 'Terminator3000'
你可以做到
<块引用>user: User = { id: 123, username: userVariable! }
!运算符表示该值不是未定义的