Typescript 2 中的尖括号和“as”有什么区别?

use*_*463 6 typescript

在下面的代码中使用as或 有什么区别<>

选项 A - 使用 'as' 作为返回值

convertResultToParams(columnView:IColumnViewResult):IColumnViewParams {
    const params = {};

    Object.keys(this.getDefaultParams())
        .map(key => params[key] = columnView[key]);

    return params as IColumnViewParams;
}
Run Code Online (Sandbox Code Playgroud)

选项 B - 使用“括号”作为返回值

convertResultToParams(columnView:IColumnViewResult):IColumnViewParams {
    const params = {};

    Object.keys(this.getDefaultParams())
        .map(key => params[key] = columnView[key]);

    return <IColumnViewParams>params;
}
Run Code Online (Sandbox Code Playgroud)

为什么我不能在变量声明中声明类型?

在此处输入图片说明

Tit*_*mir 10

您的接口可能具有必需的成员,因此初始化为{}无效。{}如果您当时正在初始化它,您可以转换为接口类型,并将很快添加字段。

const params = {} as IColumnViewParams
Run Code Online (Sandbox Code Playgroud)

最初 Typescript 用于<>强制转换,但是随着 jsx 支持的添加,这成为一个问题,因此as添加了强制转换操作符。铸造没有区别,只是您可以使用它们的上下文。as可以在任何地方使用,<>不能在tsx中使用