nko*_*3zf 3 types void promise typescript
我正在编写 TypeScript 并希望创建类似Exclude<void, Promise<void>>, 允许void但不允许 的东西Promise<void>。
type A = (a: number) => Promise<void>
type B = (a: number) => void
declare let a: A
declare let b: B
// it does not cause type error
b = a
// what i want to do...
// but it is identical to B
type C = (a: number) => Exclude<void, Promise<void>>
Run Code Online (Sandbox Code Playgroud)
然而,Exclude<void,Promise<void>>似乎与 相同void。
有没有一些方法可以创建这样的类型?
正如TypeScript 文档所说:
void有点像 的反面any:根本没有任何类型。
由于没有任何类型,因此从其中排除某些内容是没有意义的。
A可以将类型分配给类型的原因是,简单地说,如果您忽略返回类型,B则任何函数都可以。void因为返回类型void本质上意味着你不能使用返回值。这个属性与任何函数兼容,你只需忽略它返回的任何内容。
这不仅影响Promise<void>所有返回类型:
declare let voidFunction: (a: number) => void;
declare let promiseFunction: (a: number) => Promise<void>;
declare let numberFunction: (a: number) => number;
declare let stringFunction: (a: number) => string;
declare let undefinedFunction: (a: number) => undefined;
voidFunction = promiseFunction; // no error
voidFunction = numberFunction; // no error
voidFunction = stringFunction; // no error
voidFunction = undefinedFunction; // no error
Run Code Online (Sandbox Code Playgroud)
但请注意,事实并非如此:
promiseFunction = voidFunction; // error
numberFunction = voidFunction; // error
stringFunction = voidFunction; // error
undefinedFunction = voidFunction; // error
Run Code Online (Sandbox Code Playgroud)
我认为针对您的情况更好的解决方案实际上是用作undefined返回类型而不是void:
undefinedFunction = promiseFunction; // error
undefinedFunction = numberFunction; // error
undefinedFunction = stringFunction; // error
Run Code Online (Sandbox Code Playgroud)
然而,这样做的问题是,当您声明具有返回类型的函数时,undefined您实际上需要有一个return undefined;语句,而您可能不希望有这样的语句。
为了解决这个问题,我相信undefined | void对于返回类型来说是一个很好的折衷方案:
declare let undefinedVoidFunction: (a: number) => undefined | void;
undefinedVoidFunction = promiseFunction // error
undefinedVoidFunction = numberFunction // error
undefinedVoidFunction = stringFunction // error
undefinedVoidFunction = undefinedFunction // no error
undefinedVoidFunction = voidFunction // no error
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
823 次 |
| 最近记录: |