代码之家  ›  专栏  ›  技术社区  ›  GreenAsJade

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

  •  2
  • GreenAsJade  · 技术社区  · 7 年前

    在这个 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 回复  |  直到 7 年前
        1
  •  10
  •   Fenton    7 年前

    这不是类型断言,而是用于泛型类型的类型参数。

    类型断言

    首先,这里有一个类型断言。。。

    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);
    

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

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

    function example<T>(input: T): T {
        return input;
    }
    
    const str = example('str');
    
    const num = example(3);