typescript 泛型交集导致“'T'可以用任意类型示例化”错误

ktca8awb  于 2023-05-19  发布在  TypeScript
关注(0)|答案(1)|浏览(153)

泛型条件语句的求值延迟,所以我尝试使用一个交集来提示编译器我想要的类型:

type ArgType<T> = T & (T extends MyType ? ({
    myArg?: MyInterface<T>
    })
  : never)

然而,当我试图调用一个函数来访问上面类型的参数时,我得到了这个错误:
'T'可以用任意类型示例化,该类型可能与'{ myArg:this; }'
完整代码:

type MyType = 'foo';

interface MyInterface<T extends MyType> {
    myField: T;
}

type ArgType<T> = T & (T extends MyType ? ({
    myArg?: MyInterface<T>
    })
  : never)

function myFunc<T>(arg: ArgType<T>) {
    return arg;
}

class MyClass<T extends MyType> implements MyInterface<T> {
    constructor(readonly myField: T) {}
    invoke() {
        const result = myFunc({
            myArg: this
        });
    }
}

Playground链接

r3i60tvu

r3i60tvu1#

type MyType = 'foo';

interface MyInterface<T extends MyType> {
    myField: T;
}

type ArgType<T> = T extends MyType ? {
    myArg?: MyInterface<T>;
} : never;

function myFunc<T>(arg: ArgType<T>) {
    return arg;
}

class MyClass<T extends MyType> implements MyInterface<T> {
    constructor(readonly myField: T) {}
    invoke() {
        const result = myFunc<MyType>({
            myArg: this
        });
    }
}

相关问题