/** * @module dynamo-easy */ /** * https://www.typescriptlang.org/play/index.html#src=%2F%2F%20general%20sample%0D%0A%2F%2F%20type%20A%20%3D%20keyof%20Sample%0D%0Atype%20S1%20%3D%20Pick%3CSample%2C%20'a'%3E%0D%0Atype%20S2%20%3D%20Pick%3CSample%2C%20Exclude%3Ckeyof%20Sample%2C%20'b'%3E%3E%0D%0Atype%20S3%20%3D%20Pick%3CSample%2C%20Extract%3Ckeyof%20Sample%2C%20'b'%3E%3E%0D%0Atype%20T00%20%3D%20Exclude%3C'a'%20%7C%20'b'%20%7C%20'c'%20%7C%20'd'%2C%20'a'%20%7C%20'c'%20%7C%20'f'%3E%3B%20%20%2F%2F%20%22b%22%20%7C%20%22d%22%0D%0Atype%20Meta2%3CT%3E%20%3D%20Exclude%3Ckeyof%20Metadata%3CT%3E%2C%20'getSortKey'%3E%20%26%20%7B%20getSortKey%3A%20(indexName%3F%3A%20string)%20%3D%3E%20keyof%20T%20%7D%0D%0A%0D%0Aexport%20function%20bla()%20%7B%0D%0A%20%20const%20a%3A%20S1%20%3D%20%7B%20a%3A%20'a'%20%7D%0D%0A%20%20const%20b%3A%20S2%20%3D%20%7B%20a%3A%20'a'%2C%20c%3A%20true%20%7D%0D%0A%20%20const%20c%3A%20S3%20%3D%20%7B%20b%3A%205%20%7D%0D%0A%20%20const%20d%3A%20T00%20%3D%20%7B%20b%3A%205%2C%20a%3A%20'asd'%20%7D%0D%0A%0D%0A%0D%0A%20%20return%20%7B%20a%2C%20b%2C%20c%2C%20d%20%7D%0D%0A%7D%0D%0A%0D%0Ainterface%20Sample%20%7B%0D%0A%20%20a%3A%20string%0D%0A%20%20b%3A%20number%0D%0A%20%20c%3A%20boolean%0D%0A%7D%0D%0A%0D%0Atype%20Key%3CT%3E%20%3D%20%7Bname%3A%20keyof%20T%2C%20type%3A%20'HASH'%20%7C%20'RANGE'%7D%0D%0A%0D%0Aclass%20Metadata%3CT%3E%7B%0D%0A%20%20%20%20constructor(public%20properties%3A%20Array%3Ckeyof%20T%20%7C%20Key%3CT%3E%3E)%20%7B%0D%0A%0D%0A%20%20%20%20%7D%0D%0A%0D%0A%20%20%20%20getSortKey()%3A%20keyof%20T%20%7C%20null%20%7B%0D%0A%20%20%20%20%20%20%20%20const%20keys%20%3D%20this.properties.filter(p%20%3D%3E%20isKey%3CT%3E(p))%0D%0A%20%20%20%20%20%20%20%20if%20(keys%20%26%26%20keys.length)%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20keys%5B0%5D.name%0D%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20null%0D%0A%20%20%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%7D%0D%0A%7D%0D%0A%0D%0Afunction%20isKey%3CT%3E(value%3A%20any)%3A%20value%20is%20Key%3Cany%3E%20%7B%0D%0A%20%20%20%20return%20typeof%20value%20%3D%3D%3D%20'object'%20%26%26%20'name'%20in%20value%20%26%26%20'type'%20in%20value%0D%0A%7D%0D%0A%0D%0Atype%20Omit%3CT%2C%20K%20extends%20keyof%20T%3E%20%3D%20Pick%3CT%2C%20Exclude%3Ckeyof%20T%2C%20K%3E%3E%0D%0A%0D%0Atype%20MetadataWithSortKey%3CT%3E%20%3D%20Omit%3CMetadata%3CT%3E%2C%20'getSortKey'%3E%20%26%20%7B%20getSortKey%3A%20(indexName%3F%3A%20string)%20%3D%3E%20keyof%20T%20%7D%0D%0A%0D%0Aexport%20function%20hasSortKey%3CT%3E(metadata%3A%20Metadata%3CT%3E)%3A%20metadata%20is%20MetadataWithSortKey%3CT%3E%20%7B%0D%0A%20%20return%20metadata.getSortKey()%20!%3D%3D%20null%0D%0A%7D%0D%0A%0D%0A%2F%2F%20asdf%0D%0Aconst%20metadata%3A%20Metadata%3CSample%3E%20%3D%20new%20Metadata%3CSample%3E(%5B%22a%22%2C%20%22b%22%5D)%0D%0A%0D%0Aif%20(hasSortKey(metadata))%20%7B%0D%0A%20%20%20%20const%20sortKey%20%3D%20metadata.getSortKey()%0D%0A%20%20%20%20if%20(!!sortKey)%20%7B%0D%0A%20%20%20%20%20%20%20%20throw%20new%20Error('sort%20key%20must%20be%20defined')%0D%0A%20%20%20%20%7D%0D%0A%7D%0D%0A * @hidden */ export declare type Omit = Pick>;