gpt4 book ai didi

javascript - TypeScript:在没有显式返回类型的情况下,不会在 lambda 中检查多余的属性

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

在下面example我想弄清楚为什么我的输入适用于我的对象的所有部分,除了我的 reducer 返回类型?

如果我明确设置:reducer: (state, action): CounterState 编译器会提示(正如预期的那样)我没有返回正确的状态。问题是,我不明白为什么我必须这样做,因为我已经在我的 Config 类型中强制执行此操作了??

简化示例:

interface CounterState {
counter: number;
}

type Reducer = () => CounterState

const reducer1: Reducer = () => ({
counter: 1,
foo: 'bar' // no errors, why?
})

const reducer2: Reducer = (): CounterState => ({
counter: 1,
foo: 'bar' // error: Object literal may only specify known properties
})

最佳答案

最后我找到了the issue在 GitHub 中,正是关于这个问题。简而言之:

Ideally this would be an error. Unfortunately it turns out to be very difficult to fix this without possibly having consequences in terms of runaway recursion and/or performance

原始答案:从 typescript 1.6 开始,对象文字 mustn't have extra properties .但是,如果您将一个对象转换为该类型,则允许使用额外的属性。例如:

const state: CounterState = {
counter: 1,
foo: "bar" // Error, unknown property 'foo'
};

const state2 = {
counter: 1,
foo: "bar" // no errors
} as CounterState

它看起来与您的问题非常相似,当您明确指定 lambda 返回类型时,将应用第一条规则。但是,如果未指定返回类型,编译器会认为:“好吧,也许我可以将对象转换为 CounterState……可以吗?我不确定……但是,我会尝试的!” , 并应用第二条规则。

但我无法引用描述此类行为的任何文档或编译器规范,我也没有找到它。

关于javascript - TypeScript:在没有显式返回类型的情况下,不会在 lambda 中检查多余的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57214325/

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