在 TypeScript 中键入 rest 运算符对象
Posted
技术标签:
【中文标题】在 TypeScript 中键入 rest 运算符对象【英文标题】:Typing rest operator object in TypeScript 【发布时间】:2019-02-04 15:55:20 【问题描述】:我试图使用 rest 运算符从 Object 中删除一个属性,但不知道如何在新 Object 上强制类型。
interface Ab
a: string;
b: number;
interface Bc
b: number;
c: boolean | undefined;
const ab: Ab = a: 'a', b: 1;
const a, ...bc = ...ab, c: true;
我知道 bc 现在有一个类型
b: number;
c: boolean;
有没有办法强制 bc
明确地属于 Bc
类型?
【问题讨论】:
您想这样做有什么特别的原因吗?两种类型相互兼容,因为它们具有相同的结构并且 Typescript 使用结构类型 当类型更复杂时,它主要用于开发人员的理智。它们在技术上是相同的,但知道确切的类型是什么会很有帮助。在我的例子中,有些类型是string | undefined
,所以将它作为 string
将很难为未来的开发人员维护。
【参考方案1】:
其实这是一个非常有趣和棘手的问题 :) 所以这是我的解决方案:
interface Abc extends Ab, Bc
bc: Bc;
const ab: Ab = a: 'a', b: 1;
const a, ...bc : Abc = ...ab, c: true as Abc;
Playground link
【讨论】:
是的,但问题的目的是明确设置bc
变量的类型。
谢谢大家帮忙,但是bc的类型好像是 ab?: Ab | undefined; bc?: Bc | undefined; b: number; c: boolean;
不知道能不能把类型变成Bc
?
当然,像这样声明Abc接口:interface Abc extends Ab, Bc bc: Bc;
我试过了,但它仍然返回类型const bc: bc: Bc; b: number; c: boolean;
,其中bc.bc
将是undefined
看起来您正在寻找的内容在 TS 团队计划中 :) 在 gihub 上查看此问题 - github.com/Microsoft/TypeScript/issues/10727以上是关于在 TypeScript 中键入 rest 运算符对象的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在 TypeScript 中精确键入 _.invert?
如何在 TypeScript 3+ 中正确键入通用元组剩余参数?