首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >你如何克服有效的断言测试的价值修改的功能,在类型记录?

你如何克服有效的断言测试的价值修改的功能,在类型记录?
EN

Stack Overflow用户
提问于 2020-05-27 07:28:50
回答 1查看 76关注 0票数 1

这是我在德诺运行的打字码。

代码语言:javascript
复制
import { assert } from "https://deno.land/std/testing/asserts.ts"

interface Tree{
    size:number
}

let tree: Tree= {
    size: 1
}

let f1 = (tree: Tree)=>{
    tree.size--
}

function main(){
    assert(tree.size === 1)
    f1(tree);
    assert(tree.size === 0);
}

当我运行它时,它在第20行编译时给出了这个错误:

代码语言:javascript
复制
error: TS2367 [ERROR]: This condition will always return 'false' since the types '1' and '0' have no overlap.
    assert(tree.size === 0);

这是有效的断言,但是IDE和类型记录编译器都会对此抱怨。你怎么解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-27 08:04:30

查看assert函数实施是如何实现的,您可以看到它使用断言签名

问题是

asserts确保所检查的任何条件对于包含范围的剩余部分必须为真。

目前,类型记录无法知道f1修改/变异了tree。您可以在控制流分析这里中阅读有关权衡的内容。

作为一种解决办法,您可以防止类型记录推断出1的文字类型。

代码语言:javascript
复制
assert(tree.size === 1 as number);

游乐场

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62037635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档