gpt4 book ai didi

传递索引类型时,Typescript 的多余属性检查失败

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

最近,我将一个索引对象传递给一个采用具有完全可选属性的接口(interface)的方法时遇到了麻烦。我本希望这会导致过多的属性检查类型警告,但 Typescript 让它顺利通过。

这是一个最小的例子:

interface SomeInterface {
a?: string;
b?: number;
}

interface IndexedInterface {
[c: string]: SomeInterface;
}

// ...

function fn(t: SomeInterface) {
console.log(typeof t.a); // should always be "string"
}

const something: SomeInterface = {
a: 'string',
b: 1,
};

const indexedThing: IndexedInterface = {
a: something,
};

fn(something); // no error, output: "string", this is fine
fn(indexedThing); // no error, output: "object", this is not fine

有什么方法可以让 Typescript 对这些情况发出警告,或者有人可以解释为什么我可以合法地将 indexedThing 传递给需要 SomeInterface 的函数吗?

最佳答案

似乎有人可能在某个时候考虑过这种行为:“当目标是弱类型并且源具有至少一个属性,调用签名或构造签名时,就会发生弱类型检查”(this comment) .但这条规则对我来说仍然毫无意义。我继续提交 a new issue .如果您向 IndexedInterface 添加属性(即使是可选属性),则会按预期报告错误。

关于传递索引类型时,Typescript 的多余属性检查失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52368008/

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