【问题标题】:TypeScript Interface Function Parameter-passingTypeScript 接口函数参数传递
【发布时间】:2019-06-15 10:21:37
【问题描述】:

课程指出代码有错误:{"name":string} 类型的参数不可分配给“squareDescriptor”类型的参数。类型 {"name":string;} 中缺少属性 "size"。

课程链接:https://courses.edx.org/courses/course-v1:Microsoft+DEV273x+1T2019/courseware/dbe869f1929d4e46b3b03e60361b9a24/54cf9872f47042b19caf02ab9eac548e/3?activate_block_id=block-v1%3AMicrosoft%2BDEV273x%2B1T2019%2Btype%40vertical%2Bblock%4068996cfa8bb844ccaa4449cb0cbaead3

我试了代码,没有报错。

interface squareDescriptor{
    "name":string,
    "size":number
}

let squareFn : Function = (square : squareDescriptor) => {
    return square.name;
}

let square = {
    "name": "a square"
}

let executeFn = squareFn(square);

预期:错误

实际结果:没有错误。

【问题讨论】:

    标签: typescript function interface parameter-passing


    【解决方案1】:

    Function 类型只是告诉编译器它包含可以传递任何参数并可能返回一些值的函数。 squareFnFunction 类型的函数,因此可以将任何参数传递给它。您碰巧分配给它的函数只接受一个 squareDescriptor 但这并不重要。唯一重要的类型是变量的类型。

    要获得该错误消息,您必须将声明更改为不使用Function,而是使用您分配的函数的实际类型。您可以省略类型,然后编译器会为您推断出正确的类型,或者显式添加正确的类型。

    let squareFn1 = (square : squareDescriptor) => {
        return square.name;
    }
    // or
    let squareFn2 : (square : squareDescriptor) => string = (square : squareDescriptor) => {
        return square.name;
    }
    

    【讨论】:

      猜你喜欢
      • 2020-02-07
      • 2016-11-22
      • 2021-05-07
      • 2022-01-17
      • 1970-01-01
      • 2018-09-15
      • 2015-03-18
      • 2021-07-28
      • 1970-01-01
      相关资源
      最近更新 更多