我想知道映射类型中的每个键是否应该具有定义的值。
我不希望出现这种情况,因为它会要求很多值。但是,我希望Partial<T>
可分配给映射类型T
,但不是。此外,从映射类型读取值时,无需进行typeof value === 'undefined'
检查。
type Mapped = { [key: string]: string };
// This works, so not all keys have to be defined
const mapped: Mapped = { 'a': 'b' };
// This is valid even with strict checks even though 's' is undefined
const s: string = mapped['c'];
const partialMapped: Partial<Mapped> = mapped;
// This doesn't work because `Partial<Mapped>` is of type `{ [key: string]: string | undefined }`
const secondMapped: Mapped = partialMapped;
由于{ 'a': 'b' }
可分配给Mapped
变量,因此我希望Partial<Mapped>
也可分配给Mapped
,但事实并非如此。这是因为值undefined
与缺少键不同吗? Partial
上是否有一个变种,使键成为可选键?
答案 0 :(得分:0)
您的代码使用了严格的null检查功能,因为您随后可以将CanonicalRequest =
HTTPRequestMethod + '\n' +
CanonicalURI + '\n' +
CanonicalQueryString + '\n' +
CanonicalHeaders + '\n' +
SignedHeaders + '\n' +
HexEncode(Hash(RequestPayload))
的值分配给undefined
。我们在这里谈论 values ,键是无所谓的!
您对string
的索引类型签名不承诺特定的键,因此可以为零或多个键分配类型。不允许的是分配非字符串值(例如Mapped
和undefined
),这就是突出显示错误的地方。
以下是该错误防范的人为例子:
null
部分版本可以接受未定义的值。 “完整”版本不允许这样做。
var undef: undefined;
const partialMapped: Partial<Mapped> = {a: undef, b: undef}; // Works