此模式抛出TypeScript错误:
类型为“(string | number)[]”的参数不能分配给类型为“string[]| number[]”的参数
function foo(value: string | number) {
return bar([value]); // <- TypeScript error
}
function bar(valueList: string[] | number[]) {
..does something...
}
我理解这是因为TypeScript编译器会将其视为字符串和数字混合的数组。
是否有一种类型安全的方法来实现这一点?我只能想投给任何感觉不好的[]:
function foo(value: string | number) {
const valueList: any[] = [value];
return bar(valueList);
}
另一个答案是好的(我投了反对票),但我个人会同意
return bar([value] as string[] | number[]);
尤其是,如果我时间不够的话。这并不意味着它是错误的或粗俗的,你只是暗示有点愚蠢(在这种情况下)打字稿。
P. S.正如@paleo所提到的,这不是完全类型安全的。
这是从jonrsharpe的答案中得到启发的,但它没有使用单独的接口,而是使用函数重载。
函数重载允许我们为单个实现指定多个签名:https://www.typescriptlang.org/docs/handbook/functions.html#overloads
function foo(value: string);
function foo(value: number);
function foo(value: any) {
return bar([value]);
}
function bar(valueList: number[] | string[]) {
}
一种方法是声明合并;为函数定义两个单独的接口(请参见函数类型),然后定义函数的单个实现:
interface Foo {
(value: string): void;
}
interface Foo {
(value: number): void;
}
const foo: Foo = function (value) {
return bar([value]);
}
这将使两种类型保持分离,因为在任何给定时间只能调用其中一个接口。
看两个例子: a = 1 def fun(a): a = 2 fun(a) print a # 1 a = [] def fun(a): a.append(1) fun(a) print a # [1] 所有的变量都可以理解是内存中一个对象的“引用”,或者,也可以看似c中void*的感觉。 通过id来看引用a的内存地址可以比较理解: a = 1 def fun(a): prin
将函数传递给另一个函数的Scala示例缺少传递的函数(时间段)接受参数(x)的情况。 我怎样才能使上述代码工作? 编辑:我在oncepersecond中添加了一个x,以明确目标是传递整数。
我在Snowflake中创建了一个函数,其中包含两个“日期”参数: 我假设我错过了一些简单的东西。是否因为I已将参数声明为“日期”数据类型,而select语句将我的日期值归类为字符串? 提前致谢
问题内容: 我花了过去的几个小时在这里和其他地方进行阅读和实验,但是我并没有真正理解我确信这是一个非常基本的概念:在不同的函数之间传递值(作为变量)。 例如,我将一堆值分配给一个函数中的列表,然后想稍后在另一个函数中使用该列表: 基于对函数参数的作用的理解,我希望这样做如下: 将“列表”初始化为空列表;打电话给main(至少,我知道我没事…) 在defineAList()中,将某些值分配给列表;然
在普通的web开发中,参数传递有这么几种形式: url: /another_page?id=3 表单: <form>...</form> 在vuejs中,不会产生表单的提交(这会引起页面的整体刷新). 所以有两种: url . 同传统语言. vuejs 内部的机制.(无法在url 中体现,可以认为是由js代码隐式实现的) 我们用一个实际的例子说明. 我们之前实现了 "博客列表页",接下来我们要实现
问题内容: 这是一个简单程序的概述 我只是不断获取“未定义全局名称foo” .....有人可以帮我吗?谢谢! 问题答案: 代码段必须是独立的-它们不能进行外部引用。您必须在statement-string或setup-string中定义值: 更好的是,重写代码以不使用全局值。