我正在努力让VS代码建议下面代码片段的键列表。你能帮我拿一下自动钥匙吗?
const myVar : Record<string, string> = {
key1: 'val1',
}
myVar.key2 = "val2",
myVar.key3 = "val3";
myVar. //doesn't populate the keys
您需要实际指定对象中可能的键。正如文档所说,Record
不是适合您的类型:
Record<键,Type>
构造一个对象类型,其属性键为keys,属性值为type。此实用程序可用于将一个类型的属性映射到另一个类型。
你可以这样做:
interface MyInterface {
key1: string;
key2: string;
key3: string;
}
const myVar : MyInterface = {
key1: 'val1',
key2: '',
key3: '',
}
myVar.key2 = "val2":
myVar.key3 = "val3";
一般来说,typescript不跟踪突变。除了这种情况。除此之外,一旦您为myVar
(我的意思是Record<...>
)定义了显式类型,TS将不会为您推断任何属性,除非您使用satisfies
操作符。
但是,如果您希望为myVar
使用显式类型Record<string, string>
,并且希望对其进行修改,则可以考虑使用断言函数
const myVar: Record<string, string> = {
key1: 'val1',
}
myVar.key2 = "val2",
myVar.key3 = "val3";
function mutate<
Obj extends { [prop: string]: string },
Key extends string,
Value extends string
>(obj: Obj, key: Key, value: Value): asserts obj is Obj & Record<Key, Value> {
Object.assign(obj, { [key]: value })
}
mutate(myVar, 'key1', 'val2')
myVar.key1 // val2
游乐场
我强烈建议你避免在打字稿中修改。TS不喜欢,请看我的文章