【发布时间】:2021-09-28 13:13:06
【问题描述】:
我有一个函数可以输出传递给它的字符串的第一个字母。就我而言,我知道可能的值是什么,假设是硬编码或通过泛型,并希望函数的返回类型与返回的字母完全相同,因此我可以将其传递给以后的函数。
我实际上找到了一种相当不优雅的方法,但我感觉它不稳定,并且可能无法在未来的 TypeScript 版本中工作,因为${infer FirstLetter} 在技术上可以代表任意数量的字符……它就是这样发生的TypeScript 目前只能找到第一个:
type Speed = 'fast' | 'slow' | 'medium';
type SpeedShort = Speed extends `${infer FirstLetter}${string}`
? FirstLetter
: never;
作为一个函数声明,它可能看起来像:
declare function firstLetter<Letters extends string>(
string: Letters,
): Letters extends `${infer FirstLetter}${string}`
? FirstLetter
: never;
【问题讨论】:
-
could technically represent any number of characters…你为什么会这样想? -
@布鲁克乔丹。你的功能没问题。 IT 将在未来的版本中工作。
-
如果您不知道传递给函数的显式值,则无法根据其返回值分配显式类型。我认为这是类型和值的目的之间的错误期望。应将类型视为对象中可能存在的值的子集。
-
@Roberto Zvjerković 因为在推论中我看不出它为什么不能决定选择“fas”并将字符串保留为“t”而不是只选择一个字母。
-
@captain-yossarian 你怎么知道?
标签: typescript typescript-types