我在TypeScript中使用命名参数时遇到问题。我知道它不支持我在TypeScript中使用它的方式。
但是我该怎么做呢?
打字稿:
SomeFunction(name1: boolean, name2: boolean, name3: boolean, name4: boolean) // Will occur only one time, so the change should be in TypeScript
JavaScript:
$(function () {
...SomeFunction({name1:false, name2:false, name3:false, name4:true}); // Will occur 100 times
});
我在看(这没有成功):
有没有办法在JavaScript中的函数调用中提供命名参数?
如何将可选的命名参数添加到 TypeScript 函数参数?
我可以在 TypeScript 中做什么,以便在 JavaScript 中使用命名参数?
我想知道的是,当我在TypeScript中使用命名参数时,VisualStudio2015没有显示语法错误。。。
PS.:我使用打字稿2.1
匿名接口
我只是想指出,您也可以在参数列表中声明没有名称的类型,如下所示,这使我们免于键入接口 myfuncArgs
。
它仍然迫使我重新键入每个参数,这很痛苦,但我不知道现在如何避免这种情况。
const assert = require('assert')
function myfunc({
myInt,
myString,
}: {
myInt: number,
myString?: string,
}
) {
return `${myInt} ${myString}`
}
assert.strictEqual(
myfunc({
myInt: 1,
myString: 'abc',
}),
'1 abc'
)
assert.strictEqual(
myfunc({
myInt: 1,
}),
'1 undefined'
)
// Fails as desired since myInt is not optional and was not given.
//assert.strictEqual(
// myfunc({
// myString: 'abc',
// }),
// 'unefined abc'
//)
// Fails as desired since wrong type of myInt.
//assert.strictEqual(
// myfunc({
// myInt: '1',
// myString: 'abc',
// }),
// '1 abc'
//)
编译并运行:
npx tsc main.ts
node main.js
测试于:
"dependencies": {
"@types/node": "^16.11.13",
"typescript": "^4.5.4"
}
相关:
> 在Typescript中析构函数参数
https://github.com/Microsoft/TypeScript/issues/29526功能请求允许语法:
function myfunc({
myInt: Number,
myString?: String,
})
当有可选参数时,您通常需要一个显式的接口
如果任何 props 是可选的,是以下示例的情况,并且可能是大多数“选项”参数的情况,那么您可能希望显式定义类型,如以下所述: https://stackoverflow.com/a/42108988/895245 因为调用者迟早需要它来逐步构建选项对象,相关: 如何在 TypeScript 中为对象动态分配属性?
例如。考虑以下工作代码:
const assert = require('assert')
interface myfuncOpts {
myInt: number,
myString?: string,
}
function myfunc({
myInt,
myString,
}: myfuncOpts) {
return `${myInt} ${myString}`
}
const opts: myfuncOpts = { myInt: 1 }
if (process.argv.length > 2) {
opts.myString = 'abc'
}
assert.strictEqual(
myfunc(opts),
'1 abc'
)
如果我们已经定义了<code>myfuncOpts</code>内联,那么我们将无法执行<code>const opts:myfuncOps</ccode>,然后执行<code>opts。myString='abc'将失败,因为:
const opts = { myInt: 1 }
if (process.argv.length > 2) {
opts.myString = 'abc'
}
opts
的类型是从不包含 myString
的初始化中推断出来的。
我希望 TypeScript 能够实现一个系统,您可以在其中说“使用此类函数的此类参数的类型”。然后我们可以使用内联参数类型定义,但仍然以某种方式引用类型,它将是 Nirvana。
获得接近“命名参数”的唯一方法是使用单个对象参数:
type SomeFunctionParams = {
name1: boolean;
name2: boolean;
name3: boolean;
name4: boolean;
}
SomeFunction(params: SomeFunctionParams) { ... }
然后:
$(function () {
SomeFunction({
name1:false,
name2:false,
name3:false,
name4:true
});
});
真正的命名参数在 JavaScript 和 TypeScript 中都不存在,但您可以使用解构来模拟命名参数:
interface Names {
name1: boolean
name2: boolean
name3: boolean
name4: boolean
}
function myFunction({name1, name2, name3, name4}: Names) {
// name1, etc. are boolean
}
注意:名称
类型实际上是可选的。以下 JavaScript 代码(不键入)在 TS 中有效:
function myFunction({name1, name2, name3, name4}) {
// name1, etc. are of type any
}
我有一个在 XML 配置中定义的Hibernate命名查询。 查询会生成一个关于个人人口统计信息的汇总报告。我们住在哪里,那个人可能住在一个省或一个县。 我想知道是否有可能根据hibernate查询参数,按省或县聚合查询。 这是我尝试过的: 参数名称为:groupReportBy。如果我硬编码“省”而不是参数名称,则此查询将起作用,但如果我按照上面显示的方式运行它,则会出现以下错误: 我从Java
问题内容: 我正在尝试学习打字稿和angularjs(因此我是JavaScript的菜鸟) 通过angularjs教程,我看到他们做了这样的事情: 在普通的javascript中: 更重要的是,这些参数可以按任何顺序排列(或根本不按顺序排列),而Project实际上是用户定义的变量/类型。angularjs框架能够将参数映射到实际对象。 那么现在到Typescript,我该如何重新创建这种类型的功
4.2. 使用可选参数和命名参数 Python 允许函数参数有缺省值;如果调用函数时不使用参数,参数将获得它的缺省值。此外,通过使用命名参数还可以以任意顺序指定参数。SQL Server Transact/SQL 中的存储过程也可以做到这些;如果你是脚本高手,你可以略过这部分。 info 函数就是这样一个例子,它有两个可选参数。 def info(object, spacing=10, coll
问题内容: 我将Oracle用作数据库层,但是问题是通过OCI8(我做了一个PDO用户空间驱动程序)的oracle仅支持SQL语句中的命名参数,不支持定位的参数。(例如使用多个?) 从根本上讲,是Laravel的Eloquent生成了SQL,但是我找不到任何有关如何重写参数构造的文档。 我希望能够以“:name”的形式创建命名参数,而不是放置多个“?” 整个查询。 能做到吗?我的猜测是它与数据库语
我想用命名参数实现一个UPDATE SET语句?可能吗? 对于这样的对象: 这是我的猜测: 对象字段可能会根据发送的请求而有所不同,因此我不想对中的参数进行“硬编码”。
问题内容: 在Python中,您可能有一个函数定义: 可以通过以下任何一种方式调用: 多亏了Python允许任意顺序的参数(只要它们被命名)。 我们遇到的问题是,随着一些更大的函数的增长,人们可能会在和之间添加参数,这意味着错误的值可能会传递给未命名的参数。另外,有时不清楚需要输入什么。我们正在寻找一种方法来强迫人们命名某些参数- 不仅是编码标准,还是理想的标志或pydev插件? 因此,在上述4个