Allow programs to specify the type of data they can consume and the type of the data they emit. This is how powershell does it (using the dotnet type system).
A program emits one type, and the other program accepts another.
Something will be needed to transform one type into another. Imagine doing that on the command line.