有没有一种方法,特别是作为函数定义的一部分,让我们对函数定义强制一个类型约束?

例如:

type IMyFunc<P = any,R = any> = (p: P) => R;

function myFunc<P = any, R = any>(p: P):R { ... }

如何让Typescribe编译器验证myFunc是接口IMyFunc的实现?

我发现的一种方法是使用一个单独的声明来验证这个...

const f: IMyFunc = myFunc;

但是,在这种情况下,泛型类型参数默认为any(所以除了默认情况外,您不能导出和使用f).我想它总比什么都没有好,但如果它存在的话,我更喜欢更简洁的东西——最好是我可以作为myFunc定义的一部分提供的东西.

例如,如果你能做到这一点就好了:

function myFunc<P = any, R = any>(params: P):R {
  ...
} : IMyFunc<P,R>;

推荐答案

目前还没有办法对function statement进行注释,使其调用签名符合现有函数类型.有一个长期的开放功能请求在microsoft/TypeScript#22063.如果你想看到它发生,给它一个警告不会伤害你.👍它可能也不会很大,因为即使是非常高的特性请求也不总是得到实现.

直到或除非有什么变化,那么,你需要以不同的方式进行这样的判断.你可以做你用const f: IMyFunc = myFunc;做的事情,甚至可以定义const myFunc: IMyFunc = function (p) { ⋯ }.

Typescript相关问答推荐

在Angular中,如何在文件上传后清除文件上传文本框

Angular中的其他服务仅获取默认值

使某些类型的字段变为可选字段'

如何在第一次加载组件时加载ref数组

在使用Typescribe时,是否有一种方法可以推断映射类型的键?

返回同时具有固定键和变量键的对象的函数的返回类型

输入元素是类型变体的对象数组的正确方法是什么?'

有没有办法解决相互影响的路由之间的合并?

是否使用非显式名称隔离在对象属性上声明的接口的内部类型?

TypeScrip:逐个 case Select 退出noUncheck kedIndexedAccess

为什么不能使用$EVENT接收字符串数组?

表单嵌套太深

使用Redux Saga操作通道对操作进行排序不起作用

对于始终仅在不是对象属性时才抛出的函数,返回Never

在排版修饰器中推断方法响应类型

在Mac和Windows上运行的Web应用程序出现这种对齐差异的原因是什么?(ReactNative)

创建一个函数,该函数返回一个行为方式与传入函数相同的函数

基于泛型的类型脚本修改类型

组件使用forwardRef类型脚本时传递props

为什么过滤器不改变可能的类型?