博客
在此博客上,我会定期发布谜语来帮助您提高 TypeScript 知识。以前有一个谜语:“烤蛋糕”。这是那件事的续集。
你的朋友乔普 (Joep) 在苹果派、芝士蛋糕和奶油蛋糕领域建立了成 智利号码数据 功的生意。但他收到越来越多关于 frikandellenvlaaien 和其他蛋糕的请求,而他不知道这些蛋糕的制作方法。 Joep 喜欢挑战,他决定烘烤一些他还不知道的蛋糕,只要你给他食谱就可以。
他很好地简化了食谱的传递过程。他编写了一个漂亮的单页应用程序,您可以在其中按照以下界面提交食谱:
<span class="copy">Copy</span>
不幸的是,并不是每个人都能提供同样有用的食谱。最近有人送来了一份没有配料的菜谱,还有人送来了一份没有名字的蛋糕,甚至还有一个机器人填写了蛋糕配方!
为了防止这种无意义的菜谱,他为菜谱编写了验证功能。
性的验证器函数,该验证器函数将属性的值作为输入并返回一个布尔值,指示该属性是否有效。 Joep 有个想法,他可以用一种更通用的方式编写 ReceptValidator 接口。他现在再次明确定义这些属性,但实际上他只是想从 Recipe 对象中复制它们。而且他还认为每次验证函数返回布尔值时都要重复这一操作很愚蠢。你能帮助他吗?
任务
编写一个通用接口 Validator<T>。 Validator<T> 必须具有与 T 相同的属性。每个属性都包含一个将原始类型转换为布尔值的函数。因此在上面的例子中,Validator<Recipe> 被赋予了属性 cakename、cooktime 等。属性 cakename 包含一个字符串到布尔函数。属性 Preparationtime 包含一个布尔函数的数字。等等。
如果您发现作业很难,您可以使用以下步骤来找到最终的解决方案。
步骤
我们首先创建一个类型 ValidationResult<T>,它为 T 的每个属性返回一个布尔值来表示验证器函数是否成功。
首先定义一个可以包含任意属性的类型,但每个属性都是布尔类型。
现在使类型更加严格。定义一个类型 ValidationResult<T>,它具有与类型 T 完全相同的属性。但是,现在每个属性都是布尔类型。
将步骤2中的类型重写为Validator<T>,其属性不包含布尔值,而是将原始属性类型转换为布尔值的函数。
如果某个步骤不起作用,您可以使用下面的提示。
TypeScript 谜语 #2:Frikandel 馅饼和其他蛋糕
-
roseline371274
- Posts: 919
- Joined: Mon Dec 23, 2024 7:00 am