I would be happy to make tensors in most numeric libraries default to float. Most tensors I come across in numpy/tensorflow are float/int tensors and given int < float making default be float would capture most usages. There are occasionally times where other tensors like string tensor are used, but I think it's reasonable to expect those to specify type variable. Similarly for tensorflow most layers take 1 tensor as input and return 1 tensor as output. But layer is free to take much more complex types so I still use Layer(Generic[InputT, OutputT]). In practice how I've handled this so far is not with aliases, but with subclasses. So I have, class LayerGeneric(Generic[InputT, OutputT]): ... class Layer(LayerGeneric[Tensor, Tensor]): ... Since alias does not work for isinstance/issubclass checks, but a subclass does. Those are the 2 biggest examples I've encountered where I would probably use this.