TypeScript JavaScript自动完成(intellisense)的额外条目没有意义,

flvlnr44  于 4个月前  发布在  TypeScript
关注(0)|答案(5)|浏览(136)

TypeScript版本: 2.2.1 / nightly (2.2.0-dev.201xxxxx)

代码

以下是JavaScript代码:

/**
* @param {MessageActivity} activity
* @param {IConversationContext} context
*/
export function Prompt_beforeResponse(activity, context)
{
  // MessageActivity is defined in typescript definition provided to the editor as having 4 properties (attachements, text, speak, type). 
 // Typing activity. will show those for properties but also: 
 //     activity  - why should activity be under itself?
 //     context - why should the second parameter be under activity?
 //     IConversationContext - why would a type, that is not a property in any object be under activity?
 //     MessageActivity - same question as above
 //     onRun - why should a global function be under activity
 //     Prompt_when - same as above
 //     Prompt_beforeResponse - same question as above and this is the function itself

//  Here is another example. obj. should display only a and b, but it also shows activity, context, MessageActivity, IConversationContext, etc.
   /**
* @type {{a: number, b: string }}
*/
   var obj = {};
   obj.
}
// A *self-contained* demonstration of the problem follows...

预期行为:

当一个JavaScript类型不是"any"时,即在jsdoc中或在typescript定义助手中定义时(参见https://github.com/Microsoft/TypeScript/wiki/JavaScript-Language-Service-in-Visual-Studio#unsupported-patterns),只有那些已定义的成员应该成为intellisense的一部分。
即使类型是any,像那样在intellisense上抛出所有内容也破坏了找出对象下合理内容的目的。

实际行为:

在intellisense中出现了一堆毫无意义的额外条目,无论是类型化的还是未类型化的场景,但这对于类型化场景特别糟糕,因为在那里已经投入了一些心思来确定应该出现在intellisense中的内容。添加所有这些条目使得intellisense功能变得不那么有用。

qyswt5oh

qyswt5oh1#

注意:此文档:#4793 提到:
由于类型推断(甚至可能不是所有场景中的定义)在某些情况下可能不准确,因此 IDE 还应提供从项目中更广泛的标识符列表中选择的功能,或者手动输入任何补全。
这可能是这个问题的根源。但我认为上面添加的所有条目都没有意义,尤其是针对已输入的情况。

3lxsmp7m

3lxsmp7m2#

老实说,在JS模式下我们无法做出任何保证。你可能已经在一个闭包中捕获了值并对其进行了操作,我不确定额外的检查是否有必要以确保这种情况是有意义的。
此外,虽然你可能觉得它没什么用,但其他人可能会觉得有用。特别是,文件中其他地方使用的标识符可能会被用来定义当前对象上的属性。似乎没有必要删除这些。就我个人而言,当我不需要进行类型检查时,我很欣赏这种灵活性。
如果你在--checkJs// @ts-check模式下看到这种行为,那么这可能是一个我们应该考虑的问题。

yftpprvb

yftpprvb3#

通过添加这些条目,有一个保证:它保证减少了javascript的智能感知功能的实用性。
我希望有人能告诉我关于我提到的具体条目的用途。类型?一个内部的另一个参数?标识符本身在标识符内?所有全局符号?
什么是--checkJs ?

carvr3hs

carvr3hs4#

--checkJs是什么?

请参阅https://github.com/Microsoft/TypeScript/wiki/What%27s-new-in-TypeScript#errors-in-js-files-with---checkjs获取更多信息。

p3rjfoxz

p3rjfoxz5#

根据#15747中的讨论,似乎对于我们知 prop 有明确类型的值,修剪完成列表是有价值的。对于类型为any{ [x:string]: any }的值,没有计划进行更改。

相关问题