首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Typescript泛型。类型系统中断的简单情况

Typescript泛型。类型系统中断的简单情况
EN

Stack Overflow用户
提问于 2019-07-02 19:07:26
回答 1查看 28关注 0票数 1

为什么TypeScript会接受以下代码:

代码语言:javascript
复制
export let repeat = <a> (a: a, n: number): Array<a> => {
  return [...Array(n).fill(a), 1] // <-- no error here (but should)
  // return [...[a], 1] // <-- an error here (as should)
}

console.log(repeat("x", 4))

tsconfig.json

代码语言:javascript
复制
"strict": true,
...

添加, 1]以检查案例。它并不是repeat逻辑的一部分。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-02 19:12:20

问题是你在使用Array(n)的时候引入了一个any[]Array(n)将返回一个any[],因此无论您在数组中放入了什么,数组扩展的结果也将是一个any[]。根据定义,any可以赋值给任何对象,包括泛型类型参数,因此赋值成功。

使用泛型构造函数,您将得到预期的错误:

代码语言:javascript
复制
export let repeat = <a> (a: a, n: number): Array<a> => {
  return [...new Array<a>(n).fill(a), 1] // <-- error now
}

您还可以考虑启用tslint规则no-unsafe-any,它可能会捕捉到这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56851105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档