Javascript 包含和不包含显式类型的变量的Typescript验证规则

Javascript 包含和不包含显式类型的变量的Typescript验证规则,javascript,typescript,type-conversion,Javascript,Typescript,Type Conversion,方法1/2的区别是什么?为什么方法2失败,因为类型“{name:string;age:number;}”不能分配给类型“obj”。Object literal只能指定已知的属性,并且类型“obj”中不存在“age”。error,但不是Approach 1 有人能帮我理解Typescript验证规则吗?这种行为称为[多余属性检查][1] 对象文字得到特殊处理,并在将其分配给其他变量或作为参数传递时进行多余的属性检查。如果对象文字具有“目标类型”不具有的任何属性,则会出现错误: 在第一个示例中,您并

方法1/2的区别是什么?为什么方法2失败,因为类型“{name:string;age:number;}”不能分配给类型“obj”。Object literal只能指定已知的属性,并且类型“obj”中不存在“age”。error,但不是Approach 1


有人能帮我理解Typescript验证规则吗?

这种行为称为
[多余属性检查][1]

对象文字得到特殊处理,并在将其分配给其他变量或作为参数传递时进行多余的属性检查。如果对象文字具有“目标类型”不具有的任何属性,则会出现错误:

在第一个示例中,您并没有收到错误,因为您使用变量引用而不是文本

顺便说一句,按照惯例,您的类型应该大写

type Obj={name:string}

而不是

type obj={name:string}

它更容易阅读

顺便说一句,我相信你的问题是复杂的,所以请随意标记它

type obj = {
    name: string;
}

type mask = {
    o: obj;
}

// Approach 1
const o1 = {
    name: "raj",
    age: 24
}
const t1: mask = {
    o: o1
}


// Approach 2
const t2: mask = {
    o: {
        name: "raj",
        age: 24
    }
}