如何返回内在的字符串操作类型?

问题描述 投票:0回答:1

返回模板文字类型,需要返回模板文字:

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)}` 
}

不起作用

typescript types template-literals
1个回答
0
投票

问题是像

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"

TypeScript 游乐场

© www.soinside.com 2019 - 2024. All rights reserved.