gpt4 book ai didi

TypeScript '{}' 类型

转载 作者:行者123 更新时间:2023-12-03 13:52:49 25 4
gpt4 key购买 nike

关于 TypeScript 的问题 {} type - 到目前为止,我认为它的意思是“没有属性的空对象”类型,但最近我偶然发现了禁止使用 {} 的 eslint 规则type 因为意思是“任何非空值”。 typescript 操场上的快速测试说这是真的:

let d: {} = {};

d = false;

此代码不会给出编译器错误,但是当我尝试分配 null 时to d,确实有错误。所以我的问题是:
  • 什么是 {}输入 typescript ?它真的代表“任何非空值”(在 TypeScript 文档中找不到确认)吗?
  • 我应该如何实际输入“没有任何属性的空对象”?
  • 最佳答案

    1. TypeScript 中的 {} 类型到底是什么?它真的代表“任何非空值”(在 TypeScript 文档中找不到确认)吗?
    如果你这样做 console.log(typeof(d));然后你会看到 {}object 类型.除了这不完全正确,但让我先解释一下对象。首先object带小写 o可以是任何非原始值,而 Object大写 O可以通过 Object.prototype 包含任何原始值.
    因此,如果您尝试使用原始值覆盖对象,则会出现错误,因为它不喜欢原始值,尽管 null 将像 object 一样工作。类型也是如此,另一方面,未定义的类型是未定义的,但始终可以分配。
    现在{}被称为“对象文字”,这实际上是 objectObject .这就是为什么原始值和非原始值都可以分配给 packt 中提到的对象字面量的原因。 .
    所以通常任何值都可以分配给对象文字。
    您可以在以下 stackblitz 中进行检查.
    2. 我应该如何实际输入“没有任何属性的空对象”?
    可能有几种方法可以做到这一点,我知道的方法是您可以像以前那样实例化它,也可以这样做:let d = {};由于类型是自动确定的,因此无需添加类型。
    另一种方法是在已知属性时使用接口(interface)定义属性,但通过在属性名称后面添加问号使它们全部可选。
    这也使其易于使用,因为您的所有属性都是已知的,并且也可以通过智能感知找到。
    例子:

    export interface User {
    name?: string;
    email?: string;
    }

    let user: User = {};
    user.name = "Joe";
    user.email = "joe@hotmail.com";
    如果这不能充分回答您的问题,请随时提问!
    Ps:有关对象的更多信息,请查看 2ality
    更新#1
    正如 Paddokt 在评论中提到的,如果您想将对象键入为空对象或仅作为特定对象,上述示例将不起作用,因此需要采用不同的方法。
    如果您希望上面的示例仅是用户或空对象,则必须将用户对象包装在不同的对象中,如下所示:
    export interface optUser {
    user?: User;
    }

    export interface User {
    name: string;
    email: string;
    }

    let optuser: optUser = {};
    optuser.user = {
    name: "Joe",
    email: "joe@hotmail.com"
    }
    这样,您可以拥有一个变量,该变量可以是空对象,也可以是包含需要姓名和电子邮件的用户的对象。
    笔记:
    知道 optuser.user = {};不起作用,optuser 有一个用户对象或者它根本没有一个对象,因为 User 本身在这里不能是一个空对象。

    关于TypeScript '{}' 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62397594/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com