如何编写将函数应用于字符串的打字稿类型? 我正在尝试编写将多元化库应用于字符串的类型。这样做的目的是列出包含我数据库表的字符串,然后将它们转换为多元化

问题描述 投票:0回答:1
type Pluralize<T extends string> = T extends `${infer S}sis` ? `${S}ses` : T extends `${infer S}y` ? `${S}ies` : T extends `${infer S}s` ? T : `${T}s`;

该解决方案有效,但是它无法正确将“ Day”之类的单词转换为“ Days”,而是将其转换为“ Daies”。从理论上讲,我可以添加更多规则来使其变得坚固,但这似乎是在重新发明轮子。 我想编写一种类型,该类型不是简单地替换结尾,而是将功能应用于字符串。我尝试了解决方案:

import pluralize from "pluralize"; type Pluralize<T extends string> = T extends string ? pluralize(T) : never;

this解决方案是错误的,但是我对打字稿并不熟悉,我不确定如何修复它。关于走向方向的任何建议将不胜感激。
	

如果是“函数”,您特别指的是

javascript

函数,那么这在打字稿中是不可能的。 JavaScript代码在运行时运行,而JavaScript代码不能简单地“抬高”到在编译时运行的类型级别。 Typescript的类型语法实际上是一种不同的,很大程度上是latect的语言,并且在某种程度上类似于JavaScript,这是因为它们通常是彼此之间的Analogous

,但不是相同的。 您可以写
const x = 5;

type X = 5;

,但是没有
javascript typescript string types
1个回答
0
投票

type X = Math.sqrt(25)或类似的东西。作为一种声明性的语言,您几乎没有像javaScript那样具有强大语言的control流。没有什么比if (X < Y) { type Z = 1; }while (X < 10) { type X = X + 1 }。有传递条件类型

,但是这些类型与递归功能编程实现更相似,而不是JavaScript。因此,无论如何,您无法将某些JavaScript库并将其运行时函数导入到类型级别,然后将其用于函数。
Microsoft/typeScript#41577
有一个长期存在的开放式功能请求,允许人们编写“函数”以定义类型。目前尚不清楚如何实施。 Typescript具有很多功能和活动部件,任何添加的功能都必须与它们一起效果很好。
,例如,有
type推理。您可以编写
type X<T> = {x: T}
然后
declare function f<T>(x: X<T>): T然后调用f({x: "abc"}),然后打字条可以点,对于该呼叫,必须是
T
。这意味着它看着
string
的定义,并弄清楚了{x: "abc"}

X<T>

应该与之匹配的内容。就像运行函数backwards一样。推理并不完美,但是如果人们开始添加任意类型的功能,他们至少必须

想推理。

类型不是对值的一对一映射,它们更像是一对多的。因此,您必须确定您的类型的作用,例如,使用unions

theTersections
。它会以某种方式在他们身上吗?那optional属性呢?等等等
nyway,即使他们确实实施了它,也不太可能只是您可以导入一些运行时库。充其量是以更急切的“样式”编写声明性类型的一些更符合人体工程学的方式。但这是纯粹的猜测。可以说这是目前不可能的。
如果您想要某种类型的系统行为,则必须在类型系统中写入它。看起来像
索引访问或
条件类型,它们可能非常复杂并且具有边缘案例。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.