现在,我在做
function fn(arg) {
const foo = arg as SomeType;
...
}
有没有一种方法可以在函数参数中进行类型转换?即类似于function fn(arg as SomeType)
以下是一个示例:
Promise.race([
Promise.resolve(1),
new Promise((_, fail) => {
setTimeout(fail, 1000);
}),
])
.then((res: number) => {
...
});
但是TS抛出:
Argument of type '(res: number) => void' is not assignable to parameter of type '(value: unknown) => void | PromiseLike<void>'.
Types of parameters 'res' and 'value' are incompatible.
Type 'unknown' is not assignable to type 'number'
相反,我必须这样做:
.then((temp) => {
const res: number = temp as number;
...
});
答案 0 :(得分:2)
TypeScript没有“类型转换”,而没有“类型断言”,因为它根本不会改变运行时行为。无法在函数参数中“强制转换”类型。但是,在开发类似以下内容时,您可以“断言” //要求它:
function fn(arg: SomeType) {
...
}
类型断言是一种告诉编译器“相信我,我知道我在做什么”的方法。类型断言就像其他语言中的类型转换一样,但是不执行数据的特殊检查或重组。它对运行时没有影响,仅由编译器使用。 TypeScript假定您(程序员)已经执行了所需的任何特殊检查。
答案 1 :(得分:1)
在此示例中,您正在竞速Promise<number>
和Promise<unknown>
,如果您知道第二个承诺总是失败(用于超时),则可以将其键入Promise<never>
。
这将确保您无法真正兑现承诺,因为_
不会接受任何可能的值。
Promise.race([
Promise.resolve(1),
new Promise<never>((_, fail) => {
setTimeout(fail, 1000);
}),
])
.then((res: number) => {
...
});
答案 2 :(得分:0)
function fn(arg: SomeType) {
...
}
如果要确保函数返回的值恰好是所需的类型,则应将其放在参数之后,如下所示:
function fn(arg: SomeType): SomeType {
return const foo = arg;
}
这样,您可以确保编译器在函数返回的值不是您想要的类型时告诉您。