首页 > 解决方案 > 打字稿所需的函数类型参数

问题描述

我想要一个需要提供类型参数的函数:

function foo<T>(key: keyof T): keyof T {
  return key;
}

foo<TypeWithoutAbc>('abc') // error
foo<TypeWithAbc>('abc') // no error
foo('abc'); // no error - why not?!

我希望 foo('abc') 会导致错误,因为我没有提供类型 - 我怎样才能使类型成为必需或完成我在这里尝试做的事情,即确保我传递的字符串存在作为提供类型的属性?

这可能吗?

我试过 <T = never> 但它不起作用,相反它几乎假设函数参数正在确定类型 T 并且当我将鼠标悬停 foo('abc')

foo('abc');

function foo<{
    abc: any;
}>(key: "abc"): "abc"

标签: typescript

解决方案


尝试使用第二种泛型类型,默认为keyof T

function foo<T, S extends keyof T = keyof T>(key: S): S {
  return key;
}

推荐阅读