gpt4 book ai didi

Typescript 接口(interface)属性作为类型化函数参数未被强制执行

转载 作者:行者123 更新时间:2023-12-05 02:06:33 25 4
gpt4 key购买 nike

我有这个界面:

interface Field {
type: string;
value: (argument1: string, argument2: string) => string;
}

const field: Field = {
type: 'text',
value: () => 'Hello'
};

为什么 typescript 不强制执行 argument1argument2?这段代码编译没有问题,我想要 typescript 来确保函数与我在接口(interface)定义中输入的完全一样。

最佳答案

Why isn't typescript enforcing the argument1 and argument2?

类型的目的是强制调用函数时必须传入那些参数。类型并不意味着函数必须对这些参数做任何事情。编写如下所示的函数是合法的,它列出参数然后不对它们执行任何操作:

value: (argument1: string, argument2: string) => 'Hello'

不过,这是没有任何好处的额外输入,因为 javascript 函数可以采用任意数量的参数,而不管列出了哪些参数。所以 typescript 还可以让你不必费心列出它们,同时仍然与类型兼容。如果您列出的参数类型不匹配,它会告诉您,但省略不是问题。

Typescript 就是故意这样设计的。请参阅文档的这一部分:https://www.typescriptlang.org/docs/handbook/type-compatibility.html#comparing-two-functions

You may be wondering why we allow ‘discarding’ parameters like in the example y = x. The reason for this assignment to be allowed is that ignoring extra function parameters is actually quite common in JavaScript. For example, Array#forEach provides three parameters to the callback function: the array element, its index, and the containing array. Nevertheless, it’s very useful to provide a callback that only uses the first parameter:

let items = [1, 2, 3];

// Don't force these extra parameters
items.forEach((item, index, array) => console.log(item));

// Should be OK!
items.forEach(item => console.log(item));

关于Typescript 接口(interface)属性作为类型化函数参数未被强制执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62735730/

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