建议
🔍 搜索词
在关键字补全中
在关键字建议中
在关键字智能感知中
✅ 可实现性检查清单
我的建议满足以下准则:
- [z] 这不会对现有的TypeScript/JavaScript代码造成破坏性的更改
- [z] 这不会改变现有JavaScript代码的运行时行为
- [z] 这可以在不根据表达式的类型发出不同的JS的情况下实现
- [z] 这不是一个运行时特性(例如库功能、具有JavaScript输出的非ECMAScript语法、JavaScript的新语法糖等)
- [z] 这个特性会与 TypeScript's Design Goals 的其他部分一致。
⭐ 建议
Typescript文档指出, in
运算符通常用于对象类型缩小,但有时您可能会忘记缩小后想要获取的属性名称。在这些位置添加额外的智能感知可以帮助解决问题。
TLDR问题:在使用 in
关键字的左侧时,不知道要完成什么。
📃 激励示例
declare const foo: { a: boolean, b: string } | { a: number, c: number }
if ('' in foo) {}
这个实现非常简单,我已经在我的项目中实现了它,但也决定尽可能提供更多的信息:
右侧补全项中的数字表示类型索引,从联合的实际位置开始(从1开始)。
当选择特定的键时,补全小部件会在每个联合类型中显示该键的类型。星号表示该键可以缩小类型(不在所有联合类型的中都存在)。
我知道有时候这些数字可能会让人困惑,例如:
type Fish = /*1*/{ swim: () => void };
type Bird = /*2*/{ fly: () => void } | /*3*/{ swim: () => void };
type Human = /*4*/{ swim?: () => void; fly?: () => void };
function move(animal: Fish | Bird | Human) {
if ("" in animal) {
animal;
} else {
animal;
}
}
我想知道是否有必要显示这样的信息,虽然对我来说非常有用,可能对其他用户来说会混淆。但是我认为至少应该为每个补全显示文档,但可能是其他格式。例如,对于上面示例中的 swim
补全:
From Fish: () => void
From Bird[2]: () => void
From Human: (() => void) | undefined
无论如何,这只是一个建议,所以请告诉我你的想法。最后,我认为应该添加新的补全类型,如 ts.ScriptElementKind.stringNotStrict
,以向客户端展示它实际上接受任意字符串。
3条答案
按热度按时间h43kikqp1#
我不确定你是如何确定联合成员的索引号的,但它们非常可能是不稳定的;联合顺序是一个内部实现细节,在足够大的代码库中实际上是随机的(它取决于在编译时首先遇到的类型的顺序,而不是它们在类型注解中出现的顺序)。尝试在你上面的例子中的联合
Fish | Bird | Human
中重新排序-不重新排序那些类型的原始定义-看看会发生什么。dxpyg8gm2#
type Human = { swim?: () => void; fly?: () => void };
P.S. 我有点想知道你是在哪里找到会飞的人的。把他们放在飞机上不算数😄
at0kjp5o3#
type Human = { swim?: () => void; fly?: () => void };
P.S. 我有点想知道你是在哪里找到会飞的人的。把他们放在飞机上不算数😉
看起来他从TS Narrowing文档中找到了例子,但他让一只鸟既能飞又能游泳,这是我迄今为止在问题中看到最有趣的事情😆
此外,仅仅具有星号名称补全功能也非常有用,从未理解过这些随机数字实际上是什么意思🤣