在下面的代码中,为什么result不是Date的类型(而不是Date|null)?

function tester(dates:Date[], x:(_:Date)=>Date|null) {
  // the type of result is still "Date|null", even after filtering out the nulls...
  let result = dates.map(d => x(d)).filter(d => d !== null); 
}

我很快就凑成了sample playground here个.

推荐答案

TypeScrip并不是说您的箭头函数就是一个类型保护.您需要传递一个显式类型保护,如:

function tester(dates:Date[], x:(p:Date)=>Date|null) {
  return dates.map(d => x(d)).filter((d): d is Date => d !== null);
}

或者创建一个可以在任何地方使用的实用程序函数:

function isDefined<T>(arg: T | null | undefined): arg is T {
  return arg !== null && arg !== undefined;
}

function tester(dates:Date[], x:(p:Date)=>Date|null) {
  return dates.map(d => x(d)).filter(isDefined);
}

Typescript相关问答推荐

如何在类型脚本中声明对象其键名称不同但类型相同?

界面中这种类型的界面界面中的多态性

使用带有RxJS主题的服务在Angular中的组件之间传递数据

在泛型类型中对子代执行递归时出错

隐式键入脚本键映射使用

如何使用类型谓词将类型限制为不可赋值的类型?

表单嵌套太深

一个打字类型可以实现一个接口吗?

如何使所有可选字段在打印脚本中都是必填字段,但不能多或少?

自定义 Select 组件的类型问题:使用带逗号的泛型类型<;T与不带逗号的<;T&>;时出错

try 使Angular依赖注入工作

如何解决&Quot;类型不可分配给TypeScrip IF语句中的类型&Quot;?

如何在try 运行独立的文字脚本Angular 项目时修复Visual Studio中的MODULE_NOT_FOUND

TS不能自己推断函数返回类型

如何正确键入泛型相对记录值类型?

如何使用IsEqual创建断言类型相等的实用程序

Typescript循环函数引用

React-跨组件共享功能的最佳实践

如何使用 Angular 确定给定值是否与应用程序中特定单选按钮的值匹配?

Typescript 子类继承的方法允许参数中未定义的键