问题是:我想创建一个获取参数并返回相同类型的函数。
我做了一个最简单的例子:
type Test = <T>(arg: T) => T;
const test: Test = (arg: string) => arg;
Run Code Online (Sandbox Code Playgroud)
Test 类型函数的这个简单实现会抛出错误“类型‘T’不能分配给类型‘string’”
有人可以解释一下为什么在不使用模板化参数中的 props 时会发生此错误吗?
我刚刚创建了一个复杂的函数,它有 3 个参数:名称、类型和方法。该函数将方法存储在存储中。它从第二个参数推断出第三个参数的返回类型。
addMethod.d.ts
interface SimplifiedTypeMap {
string: string;
number: number;
boolean: boolean;
}
type GlobalMethodAdd = <T extends keyof SimplifiedTypeMap>(
name: string,
types: T[],
method: () => SimplifiedTypeMap[T]
) => void;
interface MethodStore {
[name: string]: {
types: (keyof SimplifiedTypeMap)[];
method: () => SimplifiedTypeMap[keyof SimplifiedTypeMap];
};
}
Run Code Online (Sandbox Code Playgroud)
感谢 Typescript 引擎,最后一个参数(方法)的返回类型是从第二个参数(类型)中的项推断出来的,并且 int 强制函数的用户编写具有特定返回类型的方法
添加方法.ts
import { random } from "lodash-es";
export const methodStorage: MethodStore = {};
const addMethod: GlobalMethodAdd = (name, types, method) => {
methodStorage[name] = { types, method …Run Code Online (Sandbox Code Playgroud) intellisense type-inference typescript visual-studio-code monaco-editor