Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我应该如何强制TypeScript理解有赢';在这个数组中不能有空值吗?_Javascript_Arrays_Typescript - Fatal编程技术网

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((

我来自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((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);