Function extract() from date returns double precision value
Because the return values can be large or a decimal number. 
Double precision will accept a wide range of values

Looking at other numeric types, you only have decimal which will have overhead:  you don't know the return scale or precision needed beforehand so it would have to wide

SELECT EXTRACT(SECOND FROM TIME '17:12:28.5');
Result: 28.5

SELECT EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40.12-08');
Result: 982384720.12


See PG docs