gpt4 book ai didi

javascript - 在 Closure Compiler 中公开本地类型

转载 作者:行者123 更新时间:2023-11-30 06:31:55 26 4
gpt4 key购买 nike

我试图公开函数的返回类型,其中返回类型是在函数自己的范围内定义的。

// ==ClosureCompiler==
// @compilation_level ADVANCED_OPTIMIZATIONS
// ==/ClosureCompiler==

/** @return {MyType} */
function func(){
/** @constructor */
function MyType(){}

return new MyType();
}

/** @type {MyType} */
var instance = func();

当我编译这个 here ,我得到两个类型错误,一个是 @return 注释,一个是 @type 注释。两个错误都显示 Unknown type MyType。有没有办法让这种模式通过类型检查进行编译?

最佳答案

也许它找不到类型,因为当您创建 instance 时,MyType 类型不可用(不能执行 new MyType() 或 instance instanceof MyType ).

这可以通过在与实例相同的范围内添加 typedef 或在与 MyType 相同的范围内创建实例来解决。

两者:

/** @typedef {Object} */
var MyType;
/** @return {MyType} Returns new MyType **/
function func(){
/** @constructor */
function MyType(){
}
return new MyType();
}
/** @type {MyType} */
var instance = func();

和:

function func(){
/** @constructor */
function MyType(){
}
/** @type {MyType} */
var instance = new MyType();
return new MyType();
}

不会产生任何警告

[更新]

通过注解提供一个复杂的类型是非常困难的。您可以根据需要使类型尽可能复杂。使用 externs 是行不通的,因为 externs 变量和它们的函数不会被重命名为更短的名称(没有一些额外的编译参数)并且您无法重新定义类型。所以我猜你基本上坚持提供一个 typedef 注释:

/** @typedef {{hands:number,doSomething:function(string):boolean}} */
var MyType;
/** @return {MyType} Returns new MyType **/
function func(){
/** @constructor */
function MyType(){
this.hands=22;
}
MyType.prototype.doSomething=function(msg){
return true;
}
return new MyType();
}
/** @type {MyType} */
var instance = func();
/** @type string */
var myString=instance.hands;//warning:found number required string
/** @type Array */
var myArray=instance.doSomething("hi");//found boolean required Array

instance.doSomething(22);//found number required string
instance.doSomething();//at leas 1 argument(s)

关于javascript - 在 Closure Compiler 中公开本地类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16973684/

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