gpt4 book ai didi

typescript - 在初始声明 typescript 后声明变量类型

转载 作者:搜寻专家 更新时间:2023-10-30 22:03:45 25 4
gpt4 key购买 nike

我有以下代码:

let item = object[] | object;
if (a === true) {
item = [];
// would like to do something like item: object[] = []
(item as object[]).push(...);
else if (b === true) {
item = {};
// would like to do something like item: object = {}
(item as any).prop = ...
}
// do stuff with item

我的问题是,因为 item 可以是对象或对象列表,所以我必须转换 item 以便 typescript 允许我使用它。有没有什么方法可以在初始化时声明对象的类型,从而不需要这些转换?


澄清一下,我确实希望输入 item,我只希望在定义后指定该类型。

最佳答案

我熟悉的习惯用法是声明一个更窄类型的临时变量,然后将它赋值回更宽类型的变量。例如:

type IndexableObject = { [k: string]: any };
let item: IndexableObject[] | IndexableObject;
declare let a: boolean;
declare let b: boolean;
if (a === true) {
let itemArray: IndexableObject[] = [];
itemArray.push({ hey: 'you' }, { whats: 'up' });
item = itemArray;
} else if (b === true) {
let itemObject: IndexableObject = {};
itemObject.prop = 'hello';
item = itemObject;
}

我知道你不想引入这样的变量,但我的经验是,做任何其他事情都只是在与 TypeScript 作斗争,这通常是徒劳的。祝你好运!

编辑:看起来您基本上遇到了 this situation .正如您在 GitHub 问题中看到的那样,甚至没有人考虑实现您想要的类型缩小控制流。因此,据我所知,临时变量是唯一合理的方式。

关于typescript - 在初始声明 typescript 后声明变量类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45337497/

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