gpt4 book ai didi

TypeScript,如何使用类型化表达式传递公共(public)字段名称

转载 作者:搜寻专家 更新时间:2023-10-30 21:19:51 25 4
gpt4 key购买 nike

我想弄清楚如何在不使用所谓的魔术字符串的情况下传递给定对象的属性名(或字段名)数组 - 因为很容易出现拼写错误!本质上,我正在寻找与我认为的 csharp 的“表达式<>”相关的东西。

例如用魔法弦:searchFilter(model, 'searchParameter', ['id', 'name'])

例如输入,或者我想如何调用该函数:searchFilter(model, 'searchParameter', [m => m.id, m => m.name])


作为引用,这个函数看起来有点像这样:

使用神奇的字符串:(或者我尝试输入的方式)

private searchFilter(mode: Model, q: string, properties: string[]): boolean {
if (q === '') return true;

q = q.trim().toLowerCase();

for (let property of properties) {
if (vacature[property.toString()].toString().toLowerCase().indexOf(q) >= 0) {
return true;
}
}

return false;
}

键入:(或者我是如何尝试键入的,但这当然只是返回函数。我需要一个相关的“函数表达式”,如在 C# 中提取被调用的属性, 得到它的名字)

private searchFilter(mode: Model, q: string, propertySelector: ((x: Model) => any | string)[]): boolean {
if (q === '') return true;

q = q.trim().toLowerCase();

for (let property of propertySelector) {
if (vacature[property.toString()].toString().toLowerCase().indexOf(q) >= 0) {
return true;
}
}

return false;
}

最佳答案

你无法摆脱字符串, typescript 中还没有 nameof 属性之类的东西(目前)。

然而,您可以做的是输入一些内容作为另一种类型的键。

像这样。

interface Model {
a: string,
b: number
}

function searchFilter(model: Model, q: keyof Model) { }

这导致:

searchFilter(null, 'a') // works
searchFilter(null, 'b') // works
searchFilter(null, 'c') // error c is not a property of Model

您可以键入这样一个类型的属性数组:

function searchArray(model: Model, q: string, properties: Array<keyof Model>) { }

searchArray(null, 'blabla', ['a', 'b'])

关于TypeScript,如何使用类型化表达式传递公共(public)字段名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44738761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com