Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 为什么部分接口不接受附加字段? 用户界面{ 名称:字符串; 年龄:人数; } let user:Partial={name:'John',address:'123 Main st.}_Typescript - Fatal编程技术网

Typescript 为什么部分接口不接受附加字段? 用户界面{ 名称:字符串; 年龄:人数; } let user:Partial={name:'John',address:'123 Main st.}

Typescript 为什么部分接口不接受附加字段? 用户界面{ 名称:字符串; 年龄:人数; } let user:Partial={name:'John',address:'123 Main st.},typescript,Typescript,因此,typescript将抱怨界面用户中不存在地址。 我的理解是,只要Partial是右侧对象的子集,它就应该是有效的强制。如何正确理解它?它被称为多余属性检查 从typescript文档(): 。。。TypeScript的立场是,此代码中可能存在错误。对象文字得到特殊处理,并在将其分配给其他变量或作为参数传递时进行多余的属性检查。如果对象文字具有“目标类型”不具有的任何属性,您将得到一个错误 绕过这些检查其实很简单。最简单的方法是只使用类型断言: @阿布斯 Partial为您所做的是使用户界

因此,typescript将抱怨界面
用户
中不存在
地址

我的理解是,只要
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