0

无法发现是否可以使用类型别名断言属性的值类型。这是我的例子:

    type Primitive = string | number | boolean; 

    function comparePrimitives(a:Primitive, b:Primitive): number { /*...*/ }

    export function fromKey<T extends object> (key: keyof T)
    {
        return function(a: T, b: T): number {
            return comparePrimitives(a[key], b[key]); // TS2345
        };
    }

我遇到的问题是,发生了 TS2345。我希望能够构建一个只允许T[keyof T]原始值的函数签名。

4

1 回答 1

1

因为comparePrimitives参数是Primitives,所以T应该从带有Primitive值的对象扩展。详细的工作代码片段:

type Primitive = string | number | boolean; 

function comparePrimitives(a:Primitive, b:Primitive): number { /*...*/ }

export function fromKey<T extends { [key: string]: Primitive }> (key: keyof T)
{
    return function(a: T, b: T): number {
        return comparePrimitives(a[key], b[key]); // no TS2345
    };
}
于 2020-05-11T22:13:46.243 回答