Bug in typing iterable iterator with symbol

未关闭
#32,408 3 条评论 2 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
48/100
Issue 类型
缺陷
描述清晰度
描述清楚
活跃度
停滞
技术栈
typescript
领域
compilers

调研方向

在链接的 Playground 中复现 index.ts 中的示例,并确认针对 IterableIterator 报告的可赋值性错误。追踪可迭代迭代器类型如何处理 number | symbol 联合类型,然后验证该示例无需 TS2322 错误即可通过类型检查。

由索引模型根据 Issue 内容生成。

描述

Bug Domain: Literal Types

TypeScript Version: 3.6.0-dev.20190713

Search Terms: symbol iterableiterator

Code

const Foo = Symbol()
type FooType = typeof Foo

type SomeType = number | FooType

function giveMeSomeType(): SomeType {
    return (Math.random() > 0.5) ? 42 : Foo
}

const it: IterableIterator<SomeType> = [giveMeSomeType()][Symbol.iterator]()

Expected behavior: local constant it is typechecked correctly

Actual behavior:

Typechecking fails with error:

index.ts:10:7 - error TS2322: Type 'IterableIterator<number | symbol>' is not assignable to type 'IterableIterator<SomeType>'.
  Type 'number | symbol' is not assignable to type 'SomeType'.
    Type 'symbol' is not assignable to type 'SomeType'.

10 const it: IterableIterator<SomeType> = [giveMeSomeType()][Symbol.iterator]()

Playground Link: http://www.typescriptlang.org/play/#code/MYewdgzgLgBAYiEMC8MDKBPAtgIxAGwAoBKAKCgwAcBTeRAFSttQppADM6RTyn0Qs1RjRQwwAV1zUATjAA+XYdR4B6FTA4xQ46RFoBDCBEm0oAC32xzASwgx24sMCjXwWkOPwATGNOpQdMBhqa3MZLg1ZCSlpUgcnFzcAc2sAN2oAWWo0ASEmEgAufkElGABvUhgq339AmAAWACZSAF8eUEhYUKKASSgZfRx8aj6BqBBpAB4ckqYAPlEAbRT0rJm8mhIAXUXMXAIAOlCxia2SUiA

Related Issues: couldn't find

主要语言
Go
星标
111k
派生
14.4k
平均合并
1 天 19 小时
30 天内合并 PR
117

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

microsoft/TypeScript 的其他 Issue

查看 microsoft/TypeScript 的全部 Issue

相似的 Issue

更多 Go Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。