【问题标题】:What causes the error in the case of using let?在使用let的情况下导致错误的原因是什么?
【发布时间】:2020-11-29 20:13:02
【问题描述】:
interface Incrementor {
  (x: number): number;
  increment: number;
}

const a: Incrementor = function (x) { return 111 };
a.increment = 111;

let a1: Incrementor = function (x) { return 111 };
a1.increment = 111;

在使用let的情况下,错误提示显示“属性'increment' is missing in type '(x: number) => number' but required in type 'Incrementor'”。 但是在使用 const 的情况下不显示

本例中使用letconst有什么区别?

这是原始代码: https://www.typescriptlang.org/play?#code/JYOwLgpgTgZghgYwgAgJIgVCBbC4D2UyA3gFDLIAUAHgFzIgCu2ARtAJT1OvQDc5yUJhx4wXZmyj8AvqVIJ8IAM5hkceumG4CRALzIYjDGGCKq1diWRYwjKCGQBGZ8mn84AOiFZtq-c8d+UgAbCFU4Rw0MH1FCZH1DY1MHGktiazC7BwDXd0cvaJFweKdnXiA

【问题讨论】:

  • 如果你使用[index: string]: any而不是increment: number,它会起作用,但它仍然会作弊。但是如果你把它改成[index: string]: number就会抛出错误
  • @SerhiiBilyk 当然,[index: string]: any 允许空键值

标签: typescript typescript-typings


【解决方案1】:

这与 let 和 const 无关,boo 和 foo 都应该显示错误,因为您使用函数而不是 Incrementor 初始化它们。

const boo: Incrementor = function (x) { return 111 }; // <- Error
let foo: Incrementor = function (x) { return 111 }; // <- Error

【讨论】:

【解决方案2】:

这似乎是一个错误,我不知道 Typescript 对 const 变量做了什么。我在这个例子中找到了纠正错误的方法:let a1: Incrementor = function(x) { return 11 } as Incrementor;

【讨论】:

    猜你喜欢
    • 2019-02-07
    • 2021-08-15
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    • 2021-02-14
    • 2012-07-05
    • 2012-01-01
    相关资源
    最近更新 更多