Powershell 哈希表成员的静态类型

Powershell 哈希表成员的静态类型,powershell,static-typing,Powershell,Static Typing,我知道PowerShell在默认情况下是动态类型的,这对于“快速而肮脏”的一行程序和短脚本非常有意义。但我已经开始尝试在我的长脚本中按类型声明变量,因为这样可以避免某些bug。这适用于常规变量,即使像这样初始化为$null时也是如此[int]$int=$null。 然而,我也使用很多哈希表从函数返回多个值,我也希望在那里使用静态类型。但你不能使用类似的方法,像这样 $hash = @{ [int]int = $null [string]string = $null } $has

我知道PowerShell在默认情况下是动态类型的,这对于“快速而肮脏”的一行程序和短脚本非常有意义。但我已经开始尝试在我的长脚本中按类型声明变量,因为这样可以避免某些bug。这适用于常规变量,即使像这样初始化为$null时也是如此
[int]$int=$null
。 然而,我也使用很多哈希表从函数返回多个值,我也希望在那里使用静态类型。但你不能使用类似的方法,像这样

$hash = @{
    [int]int = $null
    [string]string = $null
}
$hash = @{
    int = [int]$null
    string = [string]$null
}
你可以这样投

$hash = @{
    [int]int = $null
    [string]string = $null
}
$hash = @{
    int = [int]$null
    string = [string]$null
}
但这仍然使哈希成员保持动态,因此$hash.int=
'string'
是有效的

我可以切换到使用自定义对象,但我发现相当难看的v3类型加速器无法承受。可悲的是,我也几乎被限制在支持v2上,所以我觉得哈希表仍然是一条路要走


那么,有没有一种方法可以在我缺少的哈希表中实现这一点?或者这就是自定义对象的原因?

哈希表是用来将任意键映射到任意值的。它们不能像严格的类定义那样工作。我怀疑PowerShell是否支持您在自定义类定义之外提出的要求。@Ansgar这正是我所期望的。出于这个原因和其他原因,我可能应该考虑授权PS升级,并看看它会采取什么样的自动化。