gpt4 book ai didi

javascript - 为什么这个索引签名不能是可选的?

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

在 TypeScript 中,有一个名为 Partial<T> 的预定义类型.它是这样定义的:

type Partial<T> = {
[P in keyof T]?: T[P];
}

显然,索引签名被标记为可选的,这有效。如果我尝试像这样做同样的事情:

interface IDictionary<T> {
[ key: string ]?: T
}

TypeScript 提示 ? .这是因为接口(interface)可能不包含可选字段,还是这是什么原因?

最佳答案

不, typescript 接口(interface)允许可选字段。原因是它没有意义,逻辑上

Partial<T>正在对 key 的外观添加约束 => P in keyof T .如果您要删除 ?在这里这意味着 Partial<T>T相同.

interface Car {
brand: string;
color: string;
}

// this is exactly the same as the interface declaration below
type PartialCar = Partial<Car>;

// this is exactly the same as the type above
interface PartialCar = {
brand?: string;
color?: string;
}

const carWithoutColor: PartialCar = { brand: "BMW" }
const thisIsStillAPartialCar: PartialCar = {}

为您的IDictionary<T>这不一样。您没有在键上添加约束(只是说它是 any string )。所以说它可以是可选的是没有意义的,因为它无论如何都是可选的(就它而言可以是任何 string)。
在你的IDictionary<T>您只是在需要类型为 T 的值部分添加约束.

const numberDictionary: IDictionary<number> = { someStupidKey: 1, oneMoreKey: 2 }
const stringDictionary: IDictionary<string> = { someStupidKeyAWFSAFWAFW: "foo", oneMoreKey: "bar" }

// typescript will assume that "someVariable" is a number
const someVariable = numberDictionary.thisIsUndefined;

// which is why this will not end up in a compile error but a runtime error
const someResult = 1 + someVariable;

如您所见,每个键都已经是可选的,您声明了IDictionary<T>

关于javascript - 为什么这个索引签名不能是可选的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57337815/

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