为什么 TypeScript 接口不支持索引签名,而类型别名却支持? [复制]

2024-02-26

我有一个带有字符串索引签名的类型:

declare var result: {
  [key: string]: number;
};

将接口分配给该类型失败:

interface IData {
  a: number;
  b: number;
}
declare var data: IData;
result = data; // Error: Type 'IData' is not assignable to type '{ [key: string]: number; }'. Index signature for type 'string' is missing in type 'IData'.

但是分配类型别名会成功:

type TData = {
  a: number;
  b: number;
};
declare var data1: TData;
result = data1; // [SUCCEED] why?

我期望接口和类型别名在分配给具有索引签名的类型时具有相同的行为。为什么他们的行为实际上不同?

TS 游乐场链接 https://www.typescriptlang.org/play/index.html#code/CYUwxgNghgTiAEA3W84GcCuEAuAueA3gFDzwDaA1iAJ75rYwCWAdgOYC6+zGAtgEYgYAbiIBfEURbZBAMyhgEASQAiUbFEIl4ULrwHCtfXf0EjRRUJFgJkMeMDU74KxyPRZs8ALz3X8APT+5ABiAIKKADIAosrs2mBgAPYwwCys8NiJ8ADMAHQAjPm5ACzwoWhojKzMPCDMngDCiTwADmqMfIwQjNjU8GgAFolYwPAC8HJdIMBERL0tCAAqquremqRO3CYGpEbwW-pmIpbQcEgoDur5+MuuRO44a5dQ+UIBQWQAygCqDQ1RMTiAHcBtQAPxAA


多余的,订阅这个问题,并且规范已经过时了

https://github.com/microsoft/TypeScript/issues/15300 https://github.com/microsoft/TypeScript/issues/15300

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 TypeScript 接口不支持索引签名,而类型别名却支持? [复制] 的相关文章

随机推荐

  • 调试 Outlook 插件桌面

    我目前正在使用 yeoman 和生成器办公室为 Outlook 开发一个插件 以将电子邮件及其附件保存到另一项服务 Outlook 版本 MS Office Professional Plus 2016 v 16 0 48 49 1000
  • 提交表单时,表单 onSubmit 函数不会触发

    我看过了 找不到任何像我的问题一样的东西 我有一个表格无法进行验证 我知道 JavaScript 文件正在加载 因为页面上的其他功能正在正常工作 我的代码如下
  • 在 Swift 3 中以编程方式使用 ScrollView

    我搜索了其他问题 似乎在 swift 3 中使用自动布局以编程方式创建滚动视图时仍然遇到一些问题 我能够让我的滚动视图显示如下图所示 但是当我滚动到底部时 我的其他标签却出现了问题不显示 滚动顶部 标签也不会消失 希望有人可以帮助查看我下面
  • 将类添加到表单字段 Django ModelForm

    我正在尝试使用 Django ModelForm 编写 Bootstrap 表单 我已阅读 Django 文档有关表单的 Django 文档 https docs djangoproject com en dev topics forms
  • Android Retrofit 2,用于编辑响应的 addInterceptor 和 addNetworkInterceptor 之间的差异

    我一直在尝试实现一个拦截器 OkHttp 3 2 和改造 2 用于在作为响应返回之前编辑 JSON 响应 我们请求数据的服务器根据成功或错误返回不同的数据 这使得映射对象变得困难 我试图通过将拦截器添加到 Retrofit 作为 Netwo
  • 去哪一个; Yii 或 Symfony

    好的 我是NOT询问哪一个更好 我知道 Yii 并不比 Symfony 好 Symfony 也不比 Yii 好 我想问的是我应该选择哪一个呢 我想提出几点 我有一个大型项目 格式非常好 编码也非常好 如果您看到我的代码 您会认为我制作了自己
  • Java Process无法通过Runtime.getRunTime().exec()获取InputStream

    try String str Process process Runtime getRuntime exec bash home abhishek workspace Pro run InputStream isout process ge
  • 动态加载程序集中的强类型 Razor 视图不会在运行时编译

    我在程序集中有一个 MVC3 区域动态加载与MEF 如果我使用具有强类型视图的 Webforms 视图引擎 一切都会正常工作 如果我将 Razor 视图引擎与dynamic模型 效果也很好 但如果我使用强类型 Razor 视图 视图编译在运
  • 在类上覆盖 dict()

    我正在尝试做一个dict 类似 Python 中的类 当你创建一个类时 你有某些方法告诉Python如何创建一个内置类 例如 覆盖 int 方法告诉 Python 如果用户使用则返回什么int 在类的一个实例上 同样适用于 float 您甚
  • redux 形式的多个复选框

    我想问一下 场景是这样的 我有多个复选框 但我的问题是每当我勾选一个复选框时 所有 4 个复选框都会被选中 还有为什么复选框的值只是 true 或 false 这是我的复选框 div div
  • 如何让 Visual Studio 自动获取传入提交

    因此 当在 MSVS 中使用 Git 时 您可以使用 Fetch 来查看正在等待您的传入提交 有没有办法将其设置为自动发生 或者我每次想到它时都被迫单击 获取 我有一个不同但接近的需求 我在一个大项目中使用了 git tf git tf f
  • 我需要释放 C 中 strerror() 的结果吗?

    据我了解 strerror errno 返回对应错误的字符串形式errno 那么 当我使用完函数后 是否需要释放函数的返回结果呢 你不仅不need to you must not 你唯一可以传递的东西free是指向您获得的内存的指针mall
  • ASP.NET Core 3.1 Azure AD 身份验证抛出 OptionsValidationException

    我正在尝试使用 Azure Active Directory 处理 Web 应用程序上的身份验证 然而 当我尝试用AuthorizeAttribute https learn microsoft com en us dotnet api m
  • 静态 D3 力导向图性能

    所以目前我正在尝试创建一个包含数千个节点和图中大约 30k 个链接的力导向图 正如您可能猜到的 模拟速度非常非常慢 我想做的是预先计算节点的所有位置并仅渲染静态 但交互式 图表 有没有办法使用 d3 js 计算力定向图而不渲染它 使其更快
  • Rails - 通过选择下拉菜单执行 ajax 调用

    我有一个视图 其中包含select标签 它不是表单的一部分 只是一个独立的下拉菜单 单击其中一个选项时 我想执行 ajax 调用 这是选择标签 这是一个基本的 jquery 我试图通过它来检测变化
  • 如何触发(window).focus页面加载?

    加载页面时 不会激活焦点 模糊状态 例如切换到另一个选项卡时blur显示 然后切换回页面focus激活 但在第一次加载页面时 没有任何状态被激活 为什么 这是预期的行为还是我搞砸了 function window focus functio
  • jupyterlab中初始化SparkContext时出错

    嗨 我正在尝试学习如何使用 pyspark 但是当我运行第一行时 import pyspark sc pyspark SparkContext local 我收到此错误 Py4JJavaError An error occurred whi
  • 如何在没有 SDK 或自定义应用程序 ID 的情况下创建 Facebook 分享按钮?

    我正在看Facebook 分享按钮的最新更新 https developers facebook com docs sharing reference share dialog如果不包含 Facebook javascript SDK 或者
  • 为什么pip找不到pysvn?

    我正在开发一个用 Python 2 编写的项目 并将其升级到 Python 3 到目前为止 我只是发现了一些很容易修复的小语法错误 我所做的就是在 Python 3 中创建一个新项目 确保其正常工作 并将旧项目中的代码块复制到新项目中 现在
  • 为什么 TypeScript 接口不支持索引签名,而类型别名却支持? [复制]

    这个问题在这里已经有答案了 我有一个带有字符串索引签名的类型 declare var result key string number 将接口分配给该类型失败 interface IData a number b number declar