首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“函数断言foo是类型”

“函数断言foo是类型”
EN

Stack Overflow用户
提问于 2020-05-07 14:18:33
回答 1查看 53关注 0票数 1

让我们创建两个虚拟类和一些示例代码:

代码语言:javascript
复制
class A {
    constructor() {}
}

class B extends A {
    value: number;

    constructor(value: number) {
        super();
        this.value = value;
    }
}


const values: A[] = [new A(), new A(), new B(123)];
const oneOfThem = values[2];

validateB(oneOfThem);

console.log(oneOfThem.value);


function validateB(item: A): asserts item is B {
    if (!(item instanceof B)) {
        throw new Error('wrong type!');
    }
}

这段代码运行得很完美。

问题是,我需要用另一个函数包装validateB

代码语言:javascript
复制
function validateBWrapper(item: A) {
    return validateB(item);
}

但是,当我在上面的代码中使用这个函数而不是validateB时,它就失去了asserts ...信息:

我不想把asserts item is B 复制到包装器函数中,在实际使用中,包装函数包装一个函数,它得到一个参数。

我正在尝试找到类似于ReturnType<>的东西,但使用asserts

有没有任何方法从给定的函数中检索asserts信息?

谢谢!

游乐场

EN

回答 1

Stack Overflow用户

发布于 2020-05-07 14:45:13

不幸的是,您是对的,assertsis是特殊的关键字,它们帮助类型记录解析器理解我们的目标--当ReturnType<>只提取一个类型时,如果是asserts,则是void,而对于is,则是boolean

而且,无需明确说明函数assertsvalue is T,就无法继承它。

我们的方式-打开github上的一个问题,然后等到他们在这里为它添加一个新的实用程序类型( https://www.typescriptlang.org/docs/handbook/utility-types.html )

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

https://stackoverflow.com/questions/61660137

复制
相关文章

相似问题

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