R is a dynamic programming language, with dynamic typing.
The language itself doesn't therefore guarantee what types of data are passed into or returned from function. The programmers and users have much greater freedom, at some cost of risk of misunderstanding/doing harm. Through familiarity with the functions you often use, you will remember / have an instinct for which types are required to go in as parameters, and which type you would expect to be returned to you from the function you call. The documentation provides some help (depending on the quality/content of said documentation)
.data A tbl.
An object of the same class as .data. One grouping level will be dropped.
this implies, summarise function process tibbles/dataframes as inputs and returns them as outputs
sd(x, na.rm = FALSE)
x a numeric vector or an R object but not a factor coercible to numeric by as.double(x)
sd processes numeric vectors, and though the documentation doesnt specify that numeric vector is returned, it is a safe assumption.
sidenote:: you could easily write a 'wrapper' function, like 'mysd()' that calls sd for you and returns a tibble. A powerful thing about R is that you can make your own functions.