说我有:
type User = {
...
}
我想创建一个新用户,但设置它为一个空对象:
const user: User = {}; // This fails saying property XX is missing
const user: User = {} as any; // This works but I don't want to use any
我怎么做呢?我不希望变量为空。
说我有:
type User = {
...
}
我想创建一个新用户,但设置它为一个空对象:
const user: User = {}; // This fails saying property XX is missing
const user: User = {} as any; // This works but I don't want to use any
我怎么做呢?我不希望变量为空。
当前回答
如果你声明了一个空对象,然后再赋值,那么你可以认为这些值是可选的(可能存在,也可能不存在),所以只要用问号将它们输入为可选的:
type User = {
Username?: string;
Email?: string;
}
其他回答
在我的例子中,Record<string, never>帮助,这是eslint推荐的
你可以在typescript中这样做
const _params = {} as any;
_params.name ='nazeh abel'
由于typescript的行为不像javascript,所以我们必须使类型为任何,否则它将不允许你动态地分配一个对象的属性
user: USER
this.user = ({} as USER)
警告
以下是评论中值得注意的两点。
要么您希望user是user |{}或Partial< user >类型,要么您需要重新定义user类型以允许一个空对象。现在,编译器正确地告诉你user不是user。——jcalz
我不认为这是一个正确的答案,因为它创建了一个不一致的类型实例,破坏了TypeScript的整个目的。在本例中,属性Username未定义,而类型注释表示它不能为undefined。- Ian Liu Rodrigues
回答
TypeScript的设计目标之一是“在正确性和生产力之间取得平衡”。如果这样做比较有效,可以使用Type Assertions为类型化变量创建空对象。
type User = {
Username: string;
Email: string;
}
const user01 = {} as User;
const user02 = <User>{};
user01.Email = "foo@bar.com";
这里有一个工作示例。
如果
type User = {
Username?: string;
Email?: string;
}
你可以声明一个空对象或者只有一个字段(例如,只有Username);在这种情况下,您将不会出现错误,这可能是一个问题。
我将更喜欢{}作为用户版本。