【问题标题】:TypeScript: Define a callable type without CallableFunction propertiesTypeScript:定义一个没有 CallableFunction 属性的可调用类型
【发布时间】:2020-03-30 04:56:43
【问题描述】:

让我们声明一个具有调用签名的类型T

type T = () => number;

让我们也声明一个这种类型的变量t

declare const t: T;

在 TypeScript Playground 或 IDE 中,我们立即看到 t 类型为 T,具有大量我们从未明确声明过的方法和属性:applybind、@987654329 @,等等。

我们如何声明T,使其仅由其调用签名定义? (TS 3.8.3+)

值得注意的是,Omit<T, "apply" | "bind" | "caller"> 的类型是 {}Omit<T, ""> 也是如此。此外,根据tscOmit<CallableFunction, ""> 不是可调用类型。

【问题讨论】:

    标签: typescript types


    【解决方案1】:

    对于核心类型(字符串、数字和是函数),您不能从类型声明中做到这一点。

    创建自己的环境

    使用--noLib 编译,并在someFile.d.ts 中为interface Stringinterface Function 等包含您自己的定义。

    这些定义仍将全局应用于所有string / number / Function 等。例如,如果您不包含.bind,则它不会出现在任何函数中.

    【讨论】:

    • 太棒了!如果我将此解决方案捆绑在一个已发布的包中,我如何告知消费者他们还需要自己从头开始重写标准库?
    • 您将库添加为包的一部分并告诉用户使用--noLib进行编译
    猜你喜欢
    • 2018-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 2019-07-03
    • 2020-04-14
    • 2019-09-13
    相关资源
    最近更新 更多