我从另一个问题中借来了这个小代码,用于按日期对数组中的对象进行排序。但是,我不知道如何将其移植到TypeScript。
this.filteredTxs.sort(function(a,b): any{
return new Date(b.date) - new Date(a.date);
});
TS错误:
/transactions-view.component.ts(72,16)中的错误:错误TS2362: 算术运算的左侧必须为“ any”类型, “数字”或枚举类型。
/transactions-view.component.ts(72,35):错误TS2363:右侧 算术运算的一面必须是“ any”,“ number”或 枚举类型。
答案 0 :(得分:2)
您不想直接将# Lines needed for the notification
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
Add-Type -AssemblyName System.Windows.Forms
$isNotificationOn = $true
$secondsBetweenMouseMoves = 6
$Pos = [System.Windows.Forms.Cursor]::Position
$PosDelta = 1
$logFilename = "previousMouseMoverAction.txt"
$errorLogFilename = "mouseMoverLog.txt"
if (!(Test-Path "$PSScriptRoot\$logFilename")) {
New-Item -path $PSScriptRoot -name $logFilename -type "file" -value "right"
Write-Host "Warning: previousMouseMoverAction.txt missing, created a new one."
}
$previousPositionChangeAction = Get-Content -Path $PSScriptRoot\$logFilename
if ($previousPositionChangeAction -eq "left") {
$PosDelta = 1
Set-Content -Path $PSScriptRoot\$logFilename -Value 'right'
} else {
$PosDelta = -1
Set-Content -Path $PSScriptRoot\$logFilename -Value 'left'
}
for ($i = 0; $i -lt $secondsBetweenMouseMoves; $i++) {
[System.Windows.Forms.Cursor]::Position = New-Object System.Drawing.Point((($Pos.X) + $PosDelta) , $Pos.Y)
if ($isNotificationOn) {
# Sending a notification to the user
$global:balloon = New-Object System.Windows.Forms.NotifyIcon
$path = (Get-Process -id $pid).Path
$balloon.Icon = [System.Drawing.Icon]::ExtractAssociatedIcon($path)
$balloon.BalloonTipIcon = [System.Windows.Forms.ToolTipIcon]::Warning
$balloon.BalloonTipText = 'I have just moved your cheese...'
$balloon.BalloonTipTitle = "Attention, $Env:USERNAME"
$balloon.Visible = $true
$balloon.ShowBalloonTip(3000)
}
}
对象强制为其基础的毫秒数,因为它们是Epoch的数值,而是想直接获取毫秒值的毫秒数,因为它们在{{1} }表达式。
您还没有告诉我们Date
和-
是什么,但是我们可以推断出它们是字符串,数字或(暂时)a.date
实例。 / p>
b.date
和Date
是字符串 如果a.date
和b.date
是字符串,则可以使用Date.parse
来解析与a.date
相同的规则的字符串,并获得毫秒数,因为自-Epoch直接值:
b.date
请注意,该问题和您问题中的原始代码都假设new Date
和return Date.parse(b.date) - Date.parse(a.date);
确实在a.date
对象要解析的appropriate format中。
b.date
和Date
是数字如果a.date
和b.date
已经 毫秒(自Epoch以来),请直接使用它们:
a.date
b.date
和return b.date - a.date;
是a.date
实例如果b.date
和Date
是a.date
实例,请使用b.date
来获取它们的基础毫秒数,因为Epoch值:
Date
答案 1 :(得分:2)
原因
Array.prototype.sort
的类型签名为:
sort(compareFn?: (a: T, b: T) => number): this;
,这意味着compareFn
应该返回number
。在您的情况下,您试图从另一个没有意义的对象中减去一个对象。之所以起作用,是因为JavaScript为您隐式强制其类型。
解决方案1
根据您的问题,我假设
filteredTxs
是 包括类型为date
的{{1}}属性。
将Date
对象显式地设置为数字:
Date
解决方案2
使用隐式强制转换来比较日期,但仅用于比较目的,不能用于减法。
this.filteredTxs.sort(function(a,b): any{
return (b.date.getTime() - a.date.getTime());
});