后续的变量声明必须具有相同的类型。变量“where”必须是“any[]”类型,但这里有“string[]”类型

Posted

技术标签:

【中文标题】后续的变量声明必须具有相同的类型。变量“where”必须是“any[]”类型,但这里有“string[]”类型【英文标题】:Subsequent variable declarations must have the same type. Variable 'where' must be of type 'any[]', but here has type 'string[]' 【发布时间】:2020-09-11 16:22:26 【问题描述】:

我有以下 javascript 条件。

var year = '2020'
var month = '05'
//var status = 'pending'

var dateParam = '' + year + '-' + month + '%';

if (status == 'pending' || status == 'completed')

    var query = "SELECT * FROM activities AS a WHERE DATE(a.start_datetime) LIKE ? AND status = ?;";
    var where = [
        dateParam,
        status
    ]

else 
    var query = "SELECT * FROM activities AS a WHERE DATE(a.start_datetime) LIKE ?;";
    var where = [
        dateParam
    ]


console.log(query)
console.log(where)

虽然它在 code-sn-p 上运行良好,但我无法从 Angular/Ionic 中获得警告,并出现以下错误。

随后的变量声明必须具有相同的类型。多变的 'where' 必须是 'any[]' 类型,但这里有 'string[]' 类型。

解决此问题的最佳方法是什么?我试图通过声明来进行实验

var where = any[] = []

但是,没有工作,我可能错过了一些东西。

【问题讨论】:

【参考方案1】:

不要使用var,使用constvar 使它成为一个全局变量。

【讨论】:

好像不行;找不到名称 'where'.ts(2304) 您需要将您的 console.log 语句放在与 wherequery 变量相同的范围内。这是因为它们不再是全球性的。【参考方案2】:

var year = '2020'
var month = '05'
//var status = 'pending'

var dateParam = '' + year + '-' + month + '%';
var where: any[] = [];
if (status == 'pending' || status == 'completed')

    var query = "SELECT * FROM activities AS a WHERE DATE(a.start_datetime) LIKE ? AND status = ?;";
    where = [
        dateParam,
        status
    ]

else 
    var query = "SELECT * FROM activities AS a WHERE DATE(a.start_datetime) LIKE ?;";
    where = [
        dateParam
    ]


console.log(query)
console.log(where)

根据你的代码回答,在顶部声明并初始化where变量。

因为 var 没有块作用域。然后query 变量。也是。

【讨论】:

啊!这行得通!感谢您指出我错过的内容。

以上是关于后续的变量声明必须具有相同的类型。变量“where”必须是“any[]”类型,但这里有“string[]”类型的主要内容,如果未能解决你的问题,请参考以下文章

如何声明多个具有相同值的变量

C#委托初学

JavaScript语法和类型

第三周学习总结

c#中怎样定义枚举?

Halcon算子翻译——global