MST

星途 面试题库

面试题:TypeScript复杂泛型约束及条件类型结合

编写一个TypeScript类型别名`MyType`,它接受两个泛型参数`T`和`U`。使用`extends`关键字和条件类型实现:如果`T`是`U`的子类型(通过`extends`判断),则`MyType`为`T`类型;否则为`never`类型。同时,编写一个函数`myFunction`,接受一个符合`MyType`类型的参数,并返回这个参数。在函数调用时,展示不同`T`和`U`取值下的类型推断和正确性。
42.8万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
type MyType<T, U> = T extends U? T : never;

function myFunction<T, U>(arg: MyType<T, U>): MyType<T, U> {
    return arg;
}

// 测试
class Animal {}
class Dog extends Animal {}
class Cat {}

// T是U的子类型
const dog: MyType<Dog, Animal> = new Dog();
const result1 = myFunction(dog); // result1类型为Dog

// T不是U的子类型
// const cat: MyType<Cat, Animal> = new Cat(); // 报错,因为Cat不是Animal的子类型
// const result2 = myFunction(cat);