typescript 对象值copy-为什么 Typescript 允许将“任何”对象类型分配给类对象?

2023-09-05 0 7,817 百度已收录

问题描述

我有一个类对象

groupNameData: GroupNameData = new GroupNameData();

,我有一个任意对象

 groupNameDatas: any;

分配 1(类别=任意)

我刚刚将类对象值分配给任何对象,例如

this.groupNameDatas = this.groupNameData;

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

分配 2(任意=类别)

现在我已经颠倒了分配,如

typescript 对象值copy-为什么 Typescript 允许将“任何”对象类型分配给类对象?

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

它也像我的第一个作业示例一样工作。 为什么它不抛出像cannotconvertimplicitly“any”to“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 对象值copy,所以它可能是您的对象的一个​​实例。

其他推荐答案

如果您查看官方文档,它清楚地表明“任何”所有编译时检查都会被忽略。

文档中的相关代码:

我们在编写应用程序时可能需要描述一个我们不知道的变量的类型。 该值可以来自动态内容,例如来自用户或第三方库。 在这种情况下,我们要选择使用类型检测typescript 对象值copy,让值通过编译时检测。 因此,我们用任何类型来标记它:

let notSure: any = 4;
notSure = "maybe a string instead";
notSure = false; // okay, definitely a boolean

Any type 是使用现有 JavaScript 的强大方式,允许您在汇编过程中逐步选择和选择类型检测。 您可能希望该对象扮演与其他语言中类似的角色。 但是 object 类型的变量只允许你为它们分配任何值 - 即使它们实际上存在,你也无法调用它们的任何方法:

如果您选择使用其他类型的 type.Number 或 String 编译时检测会播放并且您知道它是不正确的。

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'.

如果您知道类型的各个部分(显然不是全部),那么任何类型也会很方便。 例如,您可能有一个链表,但有一个混合不同类型的数组:

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

其他推荐答案

打字需要不同的思维方式,与传统静态类型语言的思维方式不同。 在 C# 或 Java 等语言中,Complatic 会给出类型错误,除非程序员提供足够的信息来向编译器澄清,否则它不应该给出类型错误。 在鼠标中,如果程序员提供了足够的信息来了解类型无效,则编译器只会给出类型错误。

使用 Any 可以使信息远离编译器。

低格式允许在编译时以任何错误的增量添加类型信息。 它可以被认为是提供任何类型信息的“超级 lint”。

多年来,类型签名已经越来越接近人们(比如我)对使用严格编译时类型检查的语言的期望,但它仍然“与 JavaScript 配合得很好”。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 typescript typescript 对象值copy-为什么 Typescript 允许将“任何”对象类型分配给类对象? https://www.wkzy.net/game/194995.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务