javascript - 删除 |来自 Typescript 类型的 null

标签 javascript typescript types error-handling null

我刚开始学习 TypeScript,在某些情况下,我得到的可能是 Type 或 null。有没有一种优雅的方式来处理这些情况?

function useHTMLElement(item: HTMLElement) {
  console.log("it worked!")
}

let myCanvas = document.getElementById('point_file');
if (myCanvas == null) {
  // abort or do something to make it non-null
}
// now I know myCanvas is not null. But the type is still `HTMLElement | null`
// I want to pass it to functions that only accept HTMLElement.
// is there a good way to tell TypeScript that it's not null anymore?
useHTMLElement(myCanvas);

我编写了以下似乎有效的函数,但这似乎是一种常见情况,我想知道语言本身是否为此提供了一些东西。

function ensureNonNull <T> (item: T | null) : T {
  if (item == null) {
    throw new Error("It's dead Jim!")
  }
  // cast it
  return <T> item;
}
useHTMLElement(ensureNonNull(myCanvas));

最佳答案

如果您实际上if block 中做一些事情来使myCanvasnull,TypeScript 将识别那:

let myCanvas = document.getElementById('point_fiel');
if (myCanvas == null) {
    return; // or throw, etc.
}
useHTMLElement(myCanvas); // OK

let myCanvas = document.getElementById('point_fiel');
if (myCanvas == null) {
    myCanvas = document.createElement('canvas');
}
useHTMLElement(myCanvas); // OK

关于javascript - 删除 |来自 Typescript 类型的 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45427155/

相关文章:

javascript - 在 vanilla javascript 中循环遍历元素并检查子级的类

php - 尝试让 Javascript 从多个选择框中选择每个子项

typescript - 如何创建使用对象信息来推断新类型的类型助手

elasticsearch - Elasticsearch -过滤与值和数据类型匹配的数据

Haskell 约束族

javascript - 有可能有水平溢出的垂直滚动 div 吗?

javascript - 调整窗口大小时菜单移动

angular - 这在 Angular 文档中意味着什么?

TypeScript 参数类型推断失败

actionscript-3 - 针对SoundEvent修复Flash错误1046