interface Foo{
one: string;
two?: number;
someFunc: (args: string|number) => string
}
所以,我正在寻找一种声明'args'类型的方法;
我想知道是否有一种方法可以指定args的类型。参数'two'是可选的。如果用户指定参数“ two”,则我希望someFunc将args用作数字和字符串,否则,除了联合类型之外,还有其他方法可以做到这一点。
谢谢。
答案 0 :(得分:2)
您要
type Foo =
| {one: string, two: number, someFunc(args: string): string}
| {one: string, someFunc(args: number): string}
答案 1 :(得分:2)
您可以使用联合而不是接口。一个工会成员将拥有two
所需的if类型编号,并具有适用于args
的类型,工会的另一名成员将具有two
可选且类型为never
确保其与其他工会会员不兼容。您将失去对参数类型的推论,但是编译器将验证函数是否具有适当的参数类型。
type Foo = {
one: string;
two?: never;
someFunc: (args: number) => string
} | {
one: string;
two: number;
someFunc: (args: string) => string
}
let foo: Foo = {
one: '',
someFunc : (a: string) => a
} // err
let foo2: Foo = {
one: '',
someFunc : (a: number) => a.toString()
} // ok
let foo3: Foo = {
one: '',
two:2,
someFunc : (a: string) => a
} // ok
let foo4: Foo = {
one: '',
two:3
someFunc : (a: number) => a.toString()
} // err