Typescript如何提示函数名称

时间:2018-10-21 07:53:39

标签: typescript

如何以字符串形式输入函数名称?这段伪代码说明了我的问题

const foo = () => null;
const bar = () => null;

interface Sth {
    caller: nameof foo | nameof bar
}

上面的代码生成以下错误:

error TS2503: Cannot find namespace 'bar'.

这样就可以了: const x: Sth = { caller: 'foo' } 但这会出错: const y: Sth = { caller: 'y' }

Typescript playground

2 个答案:

答案 0 :(得分:0)

我很难理解您要在这里完成的工作。

一只手import * as swal from 'sweetalert'; import * as _swal from 'sweetalert'; import { SweetAlert } from 'sweetalert/typings/core'; const swal: SweetAlert = _swal as any; 是匿名函数,而匿名函数没有名称。...但是,可以想象您已经做过这样的事情:

foo

您希望界面bar看起来像什么?为什么您根本不关心函数的名称?

根据您的最后评论,我认为您要完成的任务是

function foo(a: number) {
  return a;
}

function bar(x: number) {
  return x + 1;
}

答案 1 :(得分:0)

如果有人在寻找答案,要实现上述目标,您需要制作一个由函数组成的对象,并使用其键来键入keysof typeof来提示类型

const foo = () => null;
const bar = () => null;

const functions = { foo, bar };

interface HasCallerType {
    caller: keyof typeof functions
}

const a: HasCallerType = {
    caller: 'foo'
}

使用此定义,以下内容将出错:

const b: HasCallerType = {
    caller: 'meh'
}

这里是在实践中对其进行测试的链接:

Typescript playground