Javascript 我应该如何强制TypeScript理解有赢';在这个数组中不能有空值吗?
我来自JavaScript并学习TypeScript。我习惯于使用Javascript 我应该如何强制TypeScript理解有赢';在这个数组中不能有空值吗?,javascript,arrays,typescript,Javascript,Arrays,Typescript,我来自JavaScript并学习TypeScript。我习惯于使用.filter(x=>x)从数组中筛选null,但是,使用TypeScript它要求我定义数组可以包含null,这是不正确的,因为filter从数组中删除所有null: interface ILabels { alias: string publicKey: string lat: number long: number } const labels: ILabels[] = data.map((
.filter(x=>x)
从数组中筛选null
,但是,使用TypeScript它要求我定义数组可以包含null
,这是不正确的,因为filter
从数组中删除所有null
:
interface ILabels {
alias: string
publicKey: string
lat: number
long: number
}
const labels: ILabels[] = data.map((d) => {
if (d.lat && d.long) {
return {
alias: d.alias || d.publicKey,
publicKey: d.publicKey,
lat: d.lat,
long: d.long,
};
}
return null;
}).filter((x) => x);
如何强制TypeScript理解此数组中不会有任何null
?TypeScript给我的错误是:
TS2322:类型“({alias:string;publicKey:string;lat:number;long:number;}| null)[]”不能分配给类型“ILabels[]”。类型“{alias:string;publicKey:string;lat:number;long:number;}| null”不能分配给类型“ILabels”。类型“null”不可分配给类型“ILabels”
一种方法是使用用户定义的类型保护:
函数nonNull(val:T | null):val是T{
返回值!==null;
}
常量标签:ILabels[]=data.map((d)=>{
如果(纵向和纵向){
返回{
别名:d.alias | | d.publicKey,
公钥:d.publicKey,
lat:d.lat,
龙:d.long,
};
}
返回null;
}).filter(非空);
或者,使用箭头功能:
const labels: ILabels[] = data.map((d) => {
if (d.lat && d.long) {
return {
alias: d.alias || d.publicKey,
publicKey: d.publicKey,
lat: d.lat,
long: d.long,
};
}
return null;
}).filter(<T,>(x: T | null): x is T => x !== null);
const标签:ILabels[]=data.map((d)=>{
如果(纵向和纵向){
返回{
别名:d.alias | | d.publicKey,
公钥:d.publicKey,
lat:d.lat,
龙:d.long,
};
}
返回null;
}).filter((x:T | null):x是T=>x!==null);