gpt4 book ai didi

typescript - 我可以通过不带问号的特殊类型将 TypeScript 函数中的参数标记为可选吗?

转载 作者:行者123 更新时间:2023-12-04 07:14:45 29 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Optional parameters based on conditional types

(1 个回答)


10 天前关闭。




一般来说,我可以让一个函数有一个可选参数:

function func1(foo:number, bar?:string) : void {}
现在我想创建一个通用函数,其中第二个参数的类型取决于第一个参数的类型:
type Magic<T> = T extends SomeCondition ? T : never;

function func1<T>(foo:T, bar:Magic<T>) : void {}

显然是 Magic类型无法控制 ?标记前 : .
它只能使参数的类型 bar成为 never在某些情况下,但参数总是 required .
我可以通过特殊类型或任何其他方式将第二个参数设为可选吗?

更新:
一个完整的样本:
class A {
public foo:string = ''
}

type Test<T> = T extends A ? number : never

function func<T>(arg1 : T, arg2: Test<T>) {

}

// I want the second argument to be required
// if the first is subtype of class A
func({ foo: 'bar'}, 10);
// Otherwise I want the second argumtn to be optional
// However, error happens here: `Expected 2 arguments, but got 1`
func({ other: 'bar'});

最佳答案

Optional parameters based on conditional types 的副本
引用 - https://github.com/Microsoft/TypeScript/pull/24897

class A {
public foo:string = ''
}

type Test<T> = T extends A ? [number] : [];

function func<T>(arg1 : T, ...arg2: Test<T>) {

}

func({ foo: 'bar'}, 10);
func({ other: 'bar'});

关于typescript - 我可以通过不带问号的特殊类型将 TypeScript 函数中的参数标记为可选吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68832365/

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