Ответ Криса Джонсена велик, но с более новыми версиями Git (1.8.2 или новее) есть двойной шаблон звездочки, который вы можете использовать для более короткого решения:
# assuming the root folder you want to ignore is 'application'
application/**/*
# the subfolder(s) you want to track:
!application/language/gr/
Таким образом, вам не нужно «unignore» родительский каталог вложенной папки, которую вы хотите отслеживать.
С Git 2.17.0 (Не знаете, как раньше, чем эта версия. Возможно, вернуться к 1.8 .2), используя шаблон **
в сочетании с исключениями для каждого подкаталога, ведущего к вашим файлам. Например:
# assuming the root folder you want to ignore is 'application'
application/**
# Explicitly track certain content nested in the 'application' folder:
!application/language/
!application/language/gr/
!application/language/gr/** # Example adding all files & folder in the 'gr' folder
!application/language/gr/SomeFile.txt # Example adding specific file in the 'gr' folder
Я думаю, что самое близкое, что вы собираетесь получить, это что-то вроде этого:
export function mapProp<PropertyName extends string, AssignedType>(
value: AssignedType,
propertyName: PropertyName
) {
type ReturnType = {
[K in PropertyName]: AssignedType
};
// equivalent to Record<PropertyName, AssignedType>
return {
[propertyName]: value
} as ReturnType;
}
В этом случае вы будете использовать тип сопоставленного типа вместо типа с сигнатурой индекса . Добавление параметра универсального типа PropertyName
позволяет сузить ключевое прошлое string
, если вы передадите ему строковый литерал:
const thing = mapProp(123, "abc");
thing.abc; // number
thing.def; // error
В этом случае ReturnType
, как известно, эквивалентен к {abc: number}
. Если все, что вы знаете, это ключ string
во время компиляции, вы получите следующее:
declare const propName: string;
const stuff = mapProp(123, propName);
stuff.abc; // number
stuff.def; // number
Теперь ReturnType
эквивалентно {[k: string]: number}
, что означает, что он принимает любой string
(и дает ему значение number
). Это может быть не то, что вы хотите, но это лучший способ, который может сделать компилятор в этом случае.
Также обратите внимание, что без использования утверждения типа (as ReturnType
) вычисляемые свойства обычно заканчиваются как строковые индексы что-то более конкретное. В настоящее время это ограничение дизайна для TypeScript. Было несколько попыток справиться с этим, но пока ничего не сделано на этом языке.
Надеюсь, что это помогает; удачи!