它跟JS是相同的语法,但它只能用在类型操作中
type World = "world"type Greeting = `hello ${World}`type EmailLocaleIDs = "welcome_email" | "email_heading";type FooterLocaleIDs = "footer_title" | "footer_sendoff";type AllLocaleIDs = `${EmailLocaleIDs | FooterLocaleIDs}_id`;type AllLocaleIDs = `${EmailLocaleIDs | FooterLocaleIDs}_id`;type Lang = "en" | "ja" | "pt";type LocaleMessageIDs = `${Lang}_${AllLocaleIDs}`;// type LocaleMessageIDs = "en_welcome_email_id" | "en_email_heading_id" | "en_footer_title_id" | "en_footer_sendoff_id" | "ja_welcome_email_id" | "ja_email_heading_id" | "ja_footer_title_id" | "ja_footer_sendoff_id" | "pt_welcome_email_id" | "pt_email_heading_id" | "pt_footer_title_id" | "pt_footer_sendoff_id"
type PropEventSource<Type> = {on(eventName: `${string & keyof Type}Changed`,callback: (newValue: any) => void): void;};declare function makeWatchedObject<Type>(obj: Type): Type & PropEventSource<Type>;
模板字面量推断
type PropEventSource<Type> = {on<Key extends string & keyof Type>(eventName: `${Key}Changed`, callback: (newValue: Type[Key]) => void ): void;};声明一个函数签名 返回结果 是 T 以及PropEventSource 并集结果 所以结果是有 on属性的on属性是一个 从 T中keyof得到的属性,它具有一个参数 是模板字符串 Key+Changeddeclare function makeWatchedObject<Type>(obj: Type): Type & PropEventSource<Type>;const person = makeWatchedObject({firstName: "Saoirse",lastName: "Ronan",age: 26});person.on("firstNameChanged", newName => {// (parameter) newName: stringconsole.log(`new name is ${newName.toUpperCase()}`);});
内置字符串操作符
type Greeting = "Hello, world"type ShoutyGreeting = Uppercase<Greeting>// type ShoutyGreeting = "HELLO, WORLD"type ASCIICacheKey<Str extends string> = `ID-${Uppercase<Str>}`type MainID = ASCIICacheKey<"my_app">// type MainID = "ID-MY_APP"type Greeting = "Hello, world"type QuietGreeting = Lowercase<Greeting>// type QuietGreeting = "hello, world"type ASCIICacheKey<Str extends string> = `id-${Lowercase<Str>}`type MainID = ASCIICacheKey<"MY_APP">// type MainID = "id-my_app"type LowercaseGreeting = "hello, world";type Greeting = Capitalize<LowercaseGreeting>;// type Greeting = "Hello, world"type UppercaseGreeting = "HELLO WORLD";type UncomfortableGreeting = Uncapitalize<UppercaseGreeting>;// type UncomfortableGreeting = "hELLO WORLD"
