要返回模板文字类型,需要返回模板文字:
type HelloSomething = `Hello ${string}`
const str = 'World'
function sayHello(str: string): HelloSomething {
return `Hello ${str}`; // no error
// return `Hecko ${str}`; // error
// return `Hello${str}`; // error
}
以类似的方式,如何返回内在字符串操作类型?
type Capital = Capitalize<string>
function capitalWorld(string: string): Capital {
return `${string.charAt(0).toUpperCase() + string.slice(1)}`
}
不起作用
问题是像
toUpperCase()
和 slice()
这样的函数不处理字符串文字类型,而是总是返回任意 string
。
一种可能的解决方案是使
capitalWord()
成为通用函数并断言返回值。
type Capital<T extends string> = Capitalize<T>;
function capitalWorld<const T extends string>(str: T): Capital<T> {
const result = `${str.charAt(0).toUpperCase() + str.slice(1)}`;
return result as Capital<T>;
}
const lowercase = "hello world";
const capitalized = capitalWorld(lowercase);
// ^? const capitalized: "Hello world"