Typescript 为什么部分接口不接受附加字段? 用户界面{ 名称:字符串; 年龄:人数; } let user:Partial={name:'John',address:'123 Main st.}
因此,typescript将抱怨界面Typescript 为什么部分接口不接受附加字段? 用户界面{ 名称:字符串; 年龄:人数; } let user:Partial={name:'John',address:'123 Main st.},typescript,Typescript,因此,typescript将抱怨界面用户中不存在地址。 我的理解是,只要Partial是右侧对象的子集,它就应该是有效的强制。如何正确理解它?它被称为多余属性检查 从typescript文档(): 。。。TypeScript的立场是,此代码中可能存在错误。对象文字得到特殊处理,并在将其分配给其他变量或作为参数传递时进行多余的属性检查。如果对象文字具有“目标类型”不具有的任何属性,您将得到一个错误 绕过这些检查其实很简单。最简单的方法是只使用类型断言: @阿布斯 Partial为您所做的是使用户界
用户中不存在地址。
我的理解是,只要Partial
是右侧对象的子集,它就应该是有效的强制。如何正确理解它?它被称为多余属性检查
从typescript文档():
。。。TypeScript的立场是,此代码中可能存在错误。对象文字得到特殊处理,并在将其分配给其他变量或作为参数传递时进行多余的属性检查。如果对象文字具有“目标类型”不具有的任何属性,您将得到一个错误
绕过这些检查其实很简单。最简单的方法是只使用类型断言:
@阿布斯
Partial
为您所做的是使用户界面的属性成为可选的
与此类似,
interface User {
name: string;
age: number;
}
let user: Partial<User> = {name: 'John', address: '123 Main st.'}
我想你真正想做的是进一步扩展你的用户界面
interface User {
name?: string;
age?: number;
}
您可能希望链接到并使用短语“多余属性检查”。
interface User {
name: string;
age: number;
}
interface Mod extends User {
address: string;
}
// this here then makes age from the user interface optional but also allows
// you to now have the address property.
let user: Partial<Mod> = {name: "John", address: "123 Main st."};
class Users implements Mod {
address: string;
name: string;
age: number;
// we can make the address and age defaulted values if not provided
constructor(name: string, address: string = "", age: number = 0) {
this.name = name;
this.address = address;
this.age = age;
}
}
let user: Mod = new Users("John");
console.log(user.name); // "John"
console.log(user.address); // ""
console.log(user.age); // 0