Если я понимаю вопрос, вы задаете пару вещей:
- Можете ли вы явно указать тип переменной?
- Какой тип использует Powershell, если вы сами его не указали?
Powershell, безусловно, позволит вам явно указывать тип, но также будет выводить типы. Обратите внимание, что, поскольку все типы наследуются от System.Object
, явное указание [object]
в комбинированном операторе объявления / назначения не имеет значения, которое я вижу. Система типов по-прежнему выведет соответствующий дочерний тип. Например:
$x = 3
$x.GetType() # Returns 'Int32'
Remove-Variable x
[object] $x = 3
$x.GetType() # Returns 'Int32'
Remove-Variable x
[valuetype] $x = 3
$x.GetType() # Returns 'Int32'
Remove-Variable x
[int] $x = 3
$x.GetType() # Returns 'Int32'
Если вы разделите объявление и присваивание, вы можете создать переменную типа Object
:
Remove-Variable x
$x = new-object -TypeName Object
$x.GetType() # Returns 'Object'
... но как только вы присвоите значение, переменная все равно получит новый предполагаемый тип:
$x = 3
$x.GetType() # Returns 'Int32'
Хотя система типов будет счастливо выводить Int32
при указании Object
, явные типы выигрывают, когда выведенный тип будет несовместим. Например:
$x = 3 # Gets inferred type 'Int32'
[string] $x = 3 # Gets explicit type 'String'
$x = 'x' # Gets inferred type 'String'
[char] $x = 'x' # Gets explicit type 'Char'
Если ваш вопрос больше ориентирован на определение и использование пользовательских типов объектов, Stej ответит отлично.