首页 > 解决方案 > 为什么这段代码不会产生打字稿错误?

问题描述

给定以下示例:

type Bar = {
    foo: (x: number, y: number) => number;
};

const Test = (): Bar => {
    const foo = (): number => {
        return 1;
    };
    return {
        foo,
    };
};

这个片段通过了打字稿编译,我不明白为什么。

Test 是一个返回 Bar 的函数。

Bar 是一个对象,它必须有一个带有指定参数和返回类型的函数 foo。

我在这里期待一个打字稿错误....

Play with it in typescript playground: https://www.typescriptlang.org/play?ts=4.0.2#code/C4TwDgpgBAQghgJygXigbwFBW1AZge3wC4oAKADxIDsBXAWwCMIEAaKEa+phAShQD4otRswDcGAL7iAxvioBnYFAAqERSjI8S8JMkGYcUWQqUF8G0lqFdmA9FkM4EEYDQRUoARnGGpD7M6u7vaOOGYs-lB+UkA

标签: javascripttypescript

解决方案


请参阅https://www.typescriptlang.org/docs/handbook/functions.html#optional-and-default-parameters(强调我的):

可选参数和默认参数

在 TypeScript 中,假定每个参数都是函数所必需的。这并不意味着它不能被赋予 null 或 undefined,而是当函数被调用时,编译器会检查用户是否为每个参数提供了一个值。编译器还假定这些参数是唯一将传递给函数的参数。简而言之,给函数的参数数量必须与函数期望的参数数量相匹配。

所以,在你的代码之后,这有效

console.log(Test())

但这会产生编译错误

console.log(Test().foo())

推荐阅读