extends { default: any } ? never : T extends { break: any } ? never : T;
                  
                  
                  function addFunctions<T extends { [name: string]: Function }>(functions: FunctionsMap<T>) {
                  
                  
                      const defaultFunctions = {
                  
                  
                          default: () => { /* blah-blah */ },
                  
                  
                          break: () => { /* blah-blah */ },
                  
                  
                      };
                  
                  
                  
                  
                  
                      return { ...defaultFunctions, ...functions };
                  
                  
                  }
                  
                  
                
addFunctions({ test: () => { } }); // работает addFunctions({ default: () => { } }) // ругается
It works fine this way
Не уверен, что TS сможет вывести тип ключей, но можно попробовать type DefaultKeys = 'default' | 'break'; type FunctionMap<T> = T extends Record<infer K, Function> ? Omit<Record<K, Function>, DefaultKeys> : never
У меня только такая штука придумалась (запрещает поля 'default' и 'break' во входящем параметре.
Обсуждают сегодня