在typescript中转换到接口

在typescript中转换到接口,typescript,Typescript,给出以下代码片段 let x = { name: 'John', age: 30 } interface Employee { name:string, } let y:Employee = <Employee>x; console.log(y); //y still have the age property, why 设x={ 姓名:'约翰', 年龄:30 } 接口员工{ 名称:string, } 设y:Employee=x; 控制台日志(y)//

给出以下代码片段

let x = {
    name: 'John',
    age: 30
}

interface Employee {
    name:string,
}

let y:Employee = <Employee>x;

console.log(y); //y still have the age property, why
设x={
姓名:'约翰',
年龄:30
}
接口员工{
名称:string,
}
设y:Employee=x;
控制台日志(y)//你还有年龄属性,为什么
为什么typescript忽略此强制转换,并且有其他解决方案仅获取这些接口属性吗?

强制转换(或者更准确地说是类型断言)不会在运行时更改有关对象的任何内容,它只会在编译时通知编译器对象的类型,以便编译器可以执行类型检查

此外,在这种情况下,您不需要类型断言,这段代码也可以工作:

let y:Employee = x;
只有当您直接将对象文字分配给类型为
Employee
的变量时,Typescript才会在额外属性上给出错误,但如果您有一个类型为满足
Employee
接口但具有一些额外属性的变量,则该分配被视为有效。任何访问
y
的人都将有权访问
Employee
字段,并将忽略其余字段,这不会造成问题

如果希望对象仅包含
Employee
字段,则需要创建该对象:

let y:Employee = { name: x.name };
//OR
let { age, ...y } = x;
强制转换(或者更准确地说是类型断言)不会在运行时更改有关对象的任何内容,它只会在编译时通知编译器对象的类型,以便编译器可以执行类型检查

此外,在这种情况下,您不需要类型断言,这段代码也可以工作:

let y:Employee = x;
只有当您直接将对象文字分配给类型为
Employee
的变量时,Typescript才会在额外属性上给出错误,但如果您有一个类型为满足
Employee
接口但具有一些额外属性的变量,则该分配被视为有效。任何访问
y
的人都将有权访问
Employee
字段,并将忽略其余字段,这不会造成问题

如果希望对象仅包含
Employee
字段,则需要创建该对象:

let y:Employee = { name: x.name };
//OR
let { age, ...y } = x;

我知道typescript中的接口是用于类型检查的,它只由编译器使用,但我认为这应该是一种不用创建类就可以完成的方法,对吗?我知道typescript中的接口是用于类型检查的,它只由编译器使用,但我认为它应该是一种不用创建类就可以完成的方法,对吗,然而,如果我让y:Employee=x,那么“y”对象仍然具有x的所有属性。。我认为不是这样的convenient@MustafaMagdy在大多数情况下,你不应该关心这些字段,如果你通过<代码> y>代码来访问对象,你将永远无法访问它们,如果你通过对象的键,那么你可以考虑两个选项中的一个来创建一个新的对象,这些字段仅仅是那些字段。如果我让y:Employee=x。。我认为不是这样的convenient@MustafaMagdy在大多数情况下,你不应该关心这些字段,如果你通过<代码> y>代码访问对象,你将永远无法访问它们,如果你通过对象的键,那么你可以考虑两个选项中的一个来创建一个新的对象。