在调用函数时,函数名和参数之间的'类型断言'是什么?

时间:2017-11-14 11:45:02

标签: typescript assertion

Typescript React starter guide中,它给出了:

import { createStore } from 'redux';

interface StoreState {
    languageName: string;
    enthusiasmLevel: number;
}

function enthusiasm(state: StoreState, action: EnthusiasmAction): StoreState {
    // returns a StoreState
}
const store = createStore<StoreState>(enthusiasm, {
     enthusiasmLevel: 1,
     languageName: 'TypeScript',   
});

这个断言在那里做什么?

我无法找到定义此语法的位置,也无法“推断”它的含义。

1 个答案:

答案 0 :(得分:3)

这不是类型断言,它是一个类型参数,用于泛型类型。

键入断言

首先,这是一个类型断言......

const x = <HTMLAnchorElement>document.getElementById('myLink');

类型断言出现在表达式之前,并说“实际上这是一个锚点,而不仅仅是一般元素”。

泛型

现在让我们来看看泛型......

此函数接受一个字符串并将其返回。

function example(input: string): string {
    return input;
}

现在我们可以添加另一个带数字的函数并返回它,但实际上我们的函数并不关心参数的类型或返回类型 - 只要它们是相同的......

因此,不是重复每种类型的函数,我们可以说,“类型将为T,其中T将在稍后定义”。

function example<T>(input: T): T {
    return input;
}

显式类型参数

当你使用泛型(它可以是类,函数或方法)时,可以显式提供类型参数,如下所示:

function example<T>(input: T): T {
    return input;
}

const str = example<string>('str');

const num = example<number>(3);

它们看起来有点类型断言,但它们出现在不同的位置。

隐式类型参数

在许多情况下,您不需要显式传递type参数,因为编译器可以为您解决。

function example<T>(input: T): T {
    return input;
}

const str = example('str');

const num = example(3);