TypeScript не имеет естественного представления для «любой клавиши, кроме следующей». Это потребует подлинных типов вычитания , которых нет в TypeScript. Поэтому невозможно представить RecursiveOptions
как конкретный тип.
Самое близкое к тому, что я могу дать вам требуемое поведение, - это создать функцию типа, которая проверяет , что тип R
соответствует тому, что вы хотите RecursiveOptions
:
[110 ]
и вы получаете ошибки там, где ожидаете их:
let opts = asOptionsHash({
filters: {
age: 10,
name: "Fred",
foo: 10, // causes error
friends: {
age: 8,
name: 234, // causes error
pets: {
name: 'fido'
}
},
parents: {
name: "Mom"
}
},
pagination: {
page: 3,
friends: {
page: 1,
per_page: 3,
pets: {
per_page: 300
}
}
}
});
Но это сложно и, возможно, хрупко. Вместо того чтобы пытаться согнуть TypeScript по своему желанию, вы можете попробовать использовать более удобный для компилятора тип, например:
type TractablyRecursiveOptions = T & {
recursivePart?: { [k: string]: TractablyRecursiveOptions }
};
В этом случае вместо того, чтобы разрешить любой дополнительный ключ быть добавленным в T
, вы разрешаете только recursivePart
. Это единственное известное свойство может иметь любые ключи. Но это требует рефакторинга вашей opts
стоимости.
1117 Во всяком случае, надеюсь, что это помогает; удачи!
В Управлении исходным кодом Проводник нажимает папку, которая содержит файлы, Вы хотите проверить и нажать кнопку Compare Folders. Это позволит Вам видеть все, что отличается между исходным путем сервера и локальным путем.
Можно сделать это использование командной строки. Единственная проблема состоит в том, что Вы также видите информацию о папках, которые не изменились.
Например: разность tf/format:Brief $/Path/To/Solution; рекурсивный C12345~C12355 /
Недавно у меня была похожая проблема, и я написал программу, чтобы получить список изменившихся файлов. Вот ссылка на пример, который я использовал для создания своей программы. Разделение двух деревьев