The file extension would just associate this particular file to an application, but if I’m not mistaken PyTorch doesn’t check it and doesn’t have an official extension (even though .pth is commonly used).
All these state_dicts can be successfully loaded:
model = models.resnet18()
sd = model.state_dict()

torch.save(sd, 'tmp.pth')
model.load_state_dict(torch.load('tmp.pth'))

torch.save(sd, 'tmp')
model.load_state_dict(torch.load('tmp'))

torch.save(sd, 'tmp.jpeg')
model.load_state_dict(torch.load('tmp.jpeg'))

torch.save(sd, 'tmp.pkl')
model.load_state_dict(torch.load('tmp.pkl'))