使用Function.prototype.apply时如何键入函数调用

时间:2019-04-13 18:02:18

标签: javascript typescript types

我有以下几种类型:

type Options = 'A' | 'B' | 'C' | 'D'

type SpecificOptions = 'A' | 'B'

type OptionsValueType = {
  A: () => void,
  B: string
}

我用那些来构建以下类方法:

declare class MyClass {
  myFunction(option: 'A', value: OptionsValueType['A'])
  myFunction(option: 'B', value: OptionsValueType['B'])
  myFunction(option: Exclude<Options, SpecificOptions>, value: number)

}

这很好用: enter image description here

我也有一些代码使用myFunction在循环内调用Function.prototype.apply,看起来像这样:

const calls = [
  ['A', 1],
  ['B', 1],
  ['C', 1],
]

for (const call of calls) {
  a.myFunction.apply(undefined, call)
}

但是上面的代码没有显示任何类型错误。

我无法在as const数组上使用calls,因为它是动态构建的(即使可以,它似乎也不起作用)。

如何键入上面的代码以确保正确输入.apply?还是目前无法使用Typescript?

以上代码可用于this Typescript playground

1 个答案:

答案 0 :(得分:0)

如果npm install --save python-shell是动态生成的,则不会,则无法根据其值获取编译时错误。

您可以在运行时检查值并引发您自己的错误。否则,无论类型如何,JS都会将它们作为函数参数传递。

如果您想自己检查类型,可以执行以下操作:

var pyshell = require('python-shell');

pyshell.run('tensorflow.py',  function  (err, results)  {
    if  (err)  throw err;
    console.log('tensorflow.py finished.');
    console.log('results', results);
});