gpt4 book ai didi

interface - typescript 函数接口(interface)

转载 作者:搜寻专家 更新时间:2023-10-30 21:02:04 26 4
gpt4 key购买 nike

为什么 Typescript 不警告我我定义的函数与接口(interface)声明不匹配,但如果我尝试调用该函数,它会警告我。

interface IFormatter {
(data: string, toUpper : boolean): string;
};

//Compiler does not flag error here.
var upperCaseFormatter: IFormatter = function (data: string) {
return data.toUpperCase();
}

upperCaseFormatter("test"); //but does flag an error here.

最佳答案

该接口(interface)确保实现该接口(interface)的函数的所有调用者都提供所需的参数 - datatoUpper

因为 TypeScript 知道 JavaScript 不会介意您传递未使用的参数,所以它巧妙地在实现中允许这样做。

为什么这样可以?因为这意味着您可以在不影响调用代码的情况下替换接口(interface)的任何实现。

示例:您可以替换 IFormatter 实现并且代码可以工作。

interface IFormatter {
(data: string, toUpper: boolean): string;
};

var upperCaseFormatter: IFormatter = function (data: string) {
return data.toUpperCase();
}

var variableCaseFormatter: IFormatter = function (data: string, toUpper: boolean) {
if (toUpper) {
return data.toUpperCase();
}

return data.toLowerCase();
}

// Switch between these at will
//var formatter = upperCaseFormatter;
var formatter = variableCaseFormatter;

formatter("test", true);

如果 TypeScript 没有这样做,您的 upperCaseFormatter 将必须有一个名为 toUpper 的参数,该参数未在函数中的任何地方使用 - 这使得代码可读性较差。

关于interface - typescript 函数接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34451767/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com