Lui*_*reu 4 typescript typescript2.0
在查看 TypeScript 2.0 中的新功能时,我找到了never类型。根据文档,这似乎是一种设置永不返回的函数类型的聪明方法。
现在,如果我正确阅读了所有内容,则never可以分配给每种类型,但只能never分配给never. 因此,在用 VS Code 编写一个小测试时,我得到了以下结果:
function generateError(){
throw new Error("oops");
}
function do(option: "opt1" | "opt2"){
if(option === "opt1") return true;
if(option === "opt2 ) return false;
generateError();
}
let res = do("blah");
Run Code Online (Sandbox Code Playgroud)
那么,预期的类型是res什么?根据编译器的说法,它是string | undefined(这是有道理的,尽管我必须说我期望string)。我想我没有看到仅仅为了表示永远不会返回的函数而拥有一个新类型的意义。我们真的需要这个概念吗?这只是帮助它进行更好的流程分析的编译器吗?
绝不是该特定部分不应该访问的信息。例如在这段代码中
function do(): never {
while (true) {}
}
Run Code Online (Sandbox Code Playgroud)
你有一个无限循环,我们不想迭代无限循环。就这么简单。
但一个真正的问题是它如何对我们有用?例如,在创建更高级的类型以指出它们不是什么时可能会有所帮助
例如,让我们声明我们自己的 NonNullable 类型:
type NonNullable<T> = T extends null | undefined ? never : T;
Run Code Online (Sandbox Code Playgroud)
这里我们检查 T 是否为空或未定义。如果是,那么我们指出它永远不应该发生。然后在使用这种类型时:
let value: NonNullable<string>;
value = "Test";
value = null; // error
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1494 次 |
| 最近记录: |