如果我想在Javascript中以编程方式将一个属性分配给一个对象,我会这样做:
var obj = {};
obj.prop = "value";
但在TypeScript中,这会产生一个错误:
属性“prop”在类型为“{}”的值上不存在
我应该如何在TypeScript中分配任何新属性给对象?
如果我想在Javascript中以编程方式将一个属性分配给一个对象,我会这样做:
var obj = {};
obj.prop = "value";
但在TypeScript中,这会产生一个错误:
属性“prop”在类型为“{}”的值上不存在
我应该如何在TypeScript中分配任何新属性给对象?
当前回答
我写过一篇文章探讨这个话题:
Typescript -在运行时增强对象及其类型
https://tech.xriba.io/2022/03/24/typescript-enhance-an-object-and-its-type-at-runtime/
也许你可以从Typescript概念中获得灵感,比如:
映射类型 通过as键重映射 十字路口类型
其他回答
最简单的是
const obj = <any>{};
obj.prop1 = "value";
obj.prop2 = "another value"
最好的做法是使用安全输入,我建议你:
interface customObject extends MyObject {
newProp: string;
newProp2: number;
}
我写过一篇文章探讨这个话题:
Typescript -在运行时增强对象及其类型
https://tech.xriba.io/2022/03/24/typescript-enhance-an-object-and-its-type-at-runtime/
也许你可以从Typescript概念中获得灵感,比如:
映射类型 通过as键重映射 十字路口类型
为了保证类型是Object(即键值对),使用:
const obj: {[x: string]: any} = {}
obj.prop = 'cool beans'
我在尝试对作为状态存储的对象进行部分更新时遇到了这个问题。
type State = {
foo: string;
bar: string;
baz: string;
};
const newState = { foo: 'abc' };
if (someCondition) {
newState.bar = 'xyz'
}
setState(newState);
在这种情况下,最好的解决方案是使用Partial<T>。方法使所提供类型上的所有属性都是可选的。令牌。在更具体的SO主题中阅读更多关于使类型上的所有属性都是可选的。
以下是我如何用Partial<T>解决它:
type State = {
foo: string;
bar: string;
baz: string;
};
const newState: Partial<State> = { foo: 'abc' };
if (someCondition) {
newState.bar = 'xyz';
}
setState(newState);
这与fregante在他们的回答中描述的类似,但我想为这个特定的用例描绘一个更清晰的画面(这在前端应用程序中很常见)。