Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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
Javascript 为什么Typescript允许分配一个;任何;对象类型到类对象?_Javascript_Angular_Typescript_Any - Fatal编程技术网

Javascript 为什么Typescript允许分配一个;任何;对象类型到类对象?

Javascript 为什么Typescript允许分配一个;任何;对象类型到类对象?,javascript,angular,typescript,any,Javascript,Angular,Typescript,Any,我有一个类对象: groupNameData: GroupNameData = new GroupNameData(); 我有一个any对象 groupNameDatas: any; 作业1(类别=任何) 我刚刚将类对象值分配给任何对象,如 this.groupNameDatas = this.groupNameData; 这意味着,this.groupNameDatas(Any)可以接受任何类型的数据,因为它是Any对象 作业2(任意=班级) 现在我颠倒了任务,就像 this.grou

我有一个类对象:

groupNameData: GroupNameData = new GroupNameData();
我有一个
any
对象

 groupNameDatas: any;
作业1(类别=任何) 我刚刚将类对象值分配给
任何
对象,如

this.groupNameDatas = this.groupNameData;

这意味着,
this.groupNameDatas
(Any)可以接受任何类型的数据,因为它是
Any
对象

作业2(任意=班级) 现在我颠倒了任务,就像

this.groupNameData = this.groupNameDatas;// any to class

它也像我的第一个作业示例一样工作。为什么它没有抛出类似
无法隐式地将“any”转换为“GroupNameData”

这是预期的行为()。希望本示例能够澄清这一点:

let someObj = new MyClass();
// someObj will be of the "MyClass" type.

let anyObject : any;
// since anyObject is typed as any, it can hold any type:
anyObject = 1;
anyObject = "foo";
// including your class:
anyObject = someObj;

// so, if it can hold anything, it's expected that we can assign our custom classes to it:
someObj = anyObj;
但typescript如何接受将任何对象分配给类对象呢

这就是
any
类型的乐趣所在。Typescript无法知道
任何
类型的变量是否包含对象的实例。它是任何东西,因此它可能是对象的一个实例。

如果您查看,它清楚地表明,对于“any”,所有编译时检查都被忽略

文档中的相关片段:

我们可能需要描述在编写应用程序时不知道的变量类型。这些值可能来自动态内容,例如来自用户或第三方库。在这些情况下,我们希望退出类型检查,让值通过编译时检查。要做到这一点,我们可以使用任何类型的标签:

let notSure: any = 4;
notSure = "maybe a string instead";
notSure = false; // okay, definitely a boolean
any类型是使用现有JavaScript的强大方式, 允许您在检查期间逐步选择加入和退出类型检查 汇编您可能期望对象扮演类似的角色,因为它 用其他语言写。但是Object类型的变量只允许 要给它们赋值,不能对其调用任意方法 他们,甚至是那些真正存在的人:

您是否应选择使用其他类型,例如数字或字符串 编译时检查开始了,您知道这是不对的

let notSure: any = 4;
notSure.ifItExists(); // okay, ifItExists might exist at runtime
notSure.toFixed(); // okay, toFixed exists (but the compiler doesn't check)

let prettySure: Object = 4;
prettySure.toFixed(); // Error: Property 'toFixed' doesn't exist on type 'Object'.
如果您知道类型的某些部分,那么any类型也很方便,但是 也许不是全部。例如,您可能有一个数组,但 阵列混合了多种类型:

let list: any[] = [1, true, "free"];

list[1] = 100;

TypeScript需要一种不同于传统静态类型语言的思维方式。在C#或Java等语言中,编译器会给出一个类型错误,除非程序员提供了足够的信息,让编译器明白它不应该给出类型错误。在Typescript中,如果程序员提供了足够的信息让编译器知道类型无效,编译器只会给出一个类型错误

使用
Any
会从编译器中带走信息

创建Typescript是为了允许增量添加类型信息,并在编译时发现程序中尽可能多的bug。可以将其视为“超级lint”,它利用了提供的任何类型信息


多年来,Typescript已经接近了习惯于严格编译时类型检查语言的人们(如我)的期望,但最棒的是它仍然“适合”Javascript,因为它的类型是
any
,所以它可以是任何类型。我想你误解了我的问题。实际上我的问题是为什么类对象是接受任何对象?有意义吗?@LeonardoChaia,请再看一次我的问题。如果你理解类型的目的,这似乎有点明显。你想要一个香蕉。我给你这个魔法盒子里的东西,里面有一些随机的东西。让我们希望这是一个好消息banana@peeskillet如果您一直在使用C#这样的静态类型语言,我认为这一点并不明显,因为从
object
为特定类型变量赋值总是需要强制转换。没有理由如此居高临下。
Typescript无法知道任何类型的变量是否包含对象的实例,所以它完全覆盖了我的类对象??好吧,Javascript就是这样工作的。如果你可以在Javascript上做,你可以在Typescript上做。那么这和
let
var
一样吗?
如果你可以在Javascript上做,你可以在Typescript上做这件事,这就是我问这个问题的原因。对不起,我仍然不理解比较。也许这是另一个如此重要的问题。