没有缺少参数的编译错误

时间:2019-02-21 01:07:17

标签: typescript

Foo被声明为具有成员func的对象,该成员需要2个参数。在footable定义中使用Foo指定仅包含1个参数的函数。为什么没有给出编译器错误?

interface Foo {
  func: (x: number, y: number) => void;
}

const footable: { [k:string]: Foo } = {
  entry: { func: (x: number): void => {} },
}

1 个答案:

答案 0 :(得分:1)

这是预期的行为。通常,打字稿不会抱怨将更少的参数分配给需要更多参数的引用的函数。原因是在调用额外的参数时,这些参数将被忽略,并且不会发生运行时错误

let fn: (x: number, y: number) => void = () => console.log("I don't care about any arguments!")
fn(1,2)

您可以在休息参数和具有严格长度的交集中使用元组来强制使用严格数量的参数,但是除非您有充分的理由,否则我不会使用它:

interface Foo {
    func: (...a: [number, number] & { length: 2 }) => void;
}

const footable: { [k: string]: Foo } = {
    entry: { func: (x: number): void => { } }, //err
    entry2: { func: (x, y): void => { } }, // ok
}

footable[""].func(1, 2);